2

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

- (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 语句时,此代码才能正常工作。换句话说,为什么标签有正确的文字???

4

2 回答 2

6

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

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

于 2010-11-08T09:24:13.627 回答
0

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

因此,一旦它滚动出屏幕,一个单元格就会被标记为可重用。因此,您首先检查是否有任何可重用的单元格([tableView dequeueReusableCellWithIdentifier:),然后再创建一个新单元格。

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

于 2010-11-08T09:25:44.470 回答