0

UITableViewをスクロールすると(高速でスクロールするとそうなる傾向があります)、セルのデータが混同されるため、ラベルが繰り返される可能性があります。

セルを再利用するとおそらくこれが発生することは理解していますが、ユーザーがリストをすばやく下にスクロールしてすべてのセルが混同された場合、どうすればこれを回避できますか?

ありがとう。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"VideoListCell";
    VideoListCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[VideoListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // Configure the cell...
    if (isPlaylistView)
    {
        //Fill cell with data
    }
    else if (isPlaylistDetailView || isSearchResultsView)
    {
        //Fill cell with data
    }
    else
    {
        //Playlist button and uploads
        if (indexPath.section == 0)
        {
            //Fill cell with data
        }
        else
        {
            //Fill cell with data
        }
    }

    return cell;
}
4

5 に答える 5

2

通常、次の種類のコードを使用します。

cell = dequeReusableCell;
if (cell == nil) { 
    create cell;
    initialize cell;
}

fill cell with actual data from current row
return cell;

コード「現在の行の実際のデータでセルを埋める」を「if」に移動すると、現在のような動作が得られます。

したがって、答えは「初期化した後、「if(cell == nil)」ブロックの外側でセルにデータを入力する」になります。

于 2012-12-21T09:51:51.957 に答える
0

UITableViewセルがあった位置が現在画面外にある場合にのみ、再利用のためにセルをデキューします。したがって、「取り違え」について心配する必要はありません。

于 2012-12-21T09:51:41.847 に答える
0
static NSString *cellIdentifier=@"cell";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(cell==nil)
    {
        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
    }

お役に立てればと思います。

于 2012-12-21T09:53:13.487 に答える
0

たとえばに設定dequeueReusableCellWithIdentifierします。nil

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];

アップデート:

この例を参照してください...カスタムGridviewも使用してセルに多くのデータをロードします...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{    
    static NSString* cellIdentifier = @"gridCell";

    UITableViewCell *gridCell = [tableView dequeueReusableCellWithIdentifier:nil];

    if(gridCell == nil)        
    {
        gridCell =  [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];


    }
    return gridCell;
}

これがお役に立てば幸いです。

于 2012-12-21T09:53:41.563 に答える
0

カスタムセルクラスのオーバーライドprepareForReuseメソッド。この方法では、ラベルのテキストをnilに設定し、imageviewの画像もnilに設定します。この関数は、セルが再利用されるたびに呼び出されるため、これによって問題が解決されます。こんな感じかもしれない

- (void)prepareForReuse{
    [super prepareForReuse];
    self.titleLabel.text = nil;
    self.unitImageView.image = nil;
}
于 2012-12-21T11:24:09.210 に答える