0

indexPath.section == 3 && indexPath.row == 3. 第一次触发断点,我运行

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

该单元格与 处的单元格相同indexPath.section == 0 && indexPath.row == 0,而不是nil,这是我所期望的。我确定第 3 节的行数是 4。为什么不是单元格nil

4

3 回答 3

0

而不是[tableView dequeueReusableCellWithIdentifier:CellIdentifier];,使用

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CELL_IDENTIFIER];

...

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_IDENTIFIER forIndexPath:indexPath];

没有检查nil单元格。

于 2013-08-17T15:10:44.113 回答
0

我只是给您建议,如果您想限制单元格的可重用性,请按照我的以下答案进行操作,但我想在这里提一下,这对内存管理不利。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSString *CellIdentifier = [NSString stringWithFormat:@"S%1dR%1d",indexPath.section,indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
        cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

         /// Put your code here.
     }

      /// Put your code here.

    return cell;
}
于 2013-08-17T04:40:12.910 回答
0

UITableView 不一定从第一行开始绘制。它可以根据需要在给定时间绘制视图的哪一部分开始在任何地方绘制。

dequeueReusableCellWithIdentifier:方法只会返回nil一次。之后,它将永远返回一个以前用于其他行的单元格。

如果您有两行包含不兼容的单元格,那么您需要为每行设置不同的标识符。例如,也许您应该为您的案例中的每个部分设置一个标识符。

关键是如果您要绘制一千个看起来几乎相同的表格视图行,除了文本可能不同,那么您可以创建一个单元格,然后更改文本,但保留其他所有内容(字体、附件视图等)就像它通过并绘制每个一样。

于 2013-08-17T05:03:04.030 回答