从UITableView中取出可重用的单元格

时间:2010-11-08 09:17:58

标签: iphone objective-c uitableview deque

为什么此代码可以正常工作:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.textLabel.text = [NSString stringWithFormat:@"cell%i%i", indexPath.section, indexPath.row];
    }    
    return cell;
}

据我了解单元格标识符,只有当我将cell.textLabel.text = ...行移出if语句时,此代码才能正常工作。换句话说,为什么标签有正确的文本???

2 个答案:

答案 0 :(得分:6)

尝试创建比您在屏幕上看到的更多的单元格,一旦它们出列,它们将不再具有您期望的文本...

基本上你可以在屏幕上看到5行左右,但是一旦你开始滚动,你就会看到一些“有趣”的东西:)

答案 1 :(得分:0)

创建的单元格被重用。这意味着该对象被标记为可重用(从而节省了对象的完整创建)。

因此,一旦它滚出屏幕,单元格就会被标记为可重复使用。因此,在创建新单元之前,首先要检查是否有任何可重用的单元格([tableView dequeueReusableCellWithIdentifier :)。

您需要设置的文本,因为它(可能)对于表的每个单元格都不同,但与对象创建/销毁无关。