我在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
?
答案 0 :(得分: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;
}
答案 1 :(得分:0)
UITableView不一定用第一行开始绘图。它可以在任何地方开始绘制,具体取决于在给定时间需要绘制视图的哪个部分。
dequeueReusableCellWithIdentifier:
方法只会返回nil
一次。之后,它将永远返回之前用于其他行的单元格。
如果您有两行具有不兼容的单元格,则每个行都需要具有不同的标识符。例如,您的案例中每个部分都应该有一个标识符。
关键是如果你绘制了几千个看起来几乎相同的表视图行,除了文本可能不同,那么你可以创建一个单元格,然后更改文本但保留其他所有内容(字体,附件视图,等等,它完全相同,并绘制每一个。
答案 2 :(得分:0)
而不是[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
,请使用
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CELL_IDENTIFIER];
...
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_IDENTIFIER forIndexPath:indexPath];
没有检查nil
单元格。