我有一个包含1个部分和多行的表。每个单元格都包含一些标签,所以我想得到他们的文本。我的问题是,使用下面的代码,我得到前5个单元格后无法得到单元格。我知道这很奇怪。要清楚,如果我有20行,我只能得到5个单元格,下面的代码,其余15个为空。然而,for循环变为20,前5个单元格正常,但其余单元格为空......
所有行都相同,因此没有空单元格。我的错是什么?
NSIndexPath *indexPath;
ReportTableCell *cell;
for (int i = 0; i < [_tableReport numberOfRowsInSection:0] ; i++)
{
indexPath = [NSIndexPath indexPathForRow:i inSection:0];
cell = (ReportTableCell *)[_tableReport cellForRowAtIndexPath:indexPath];
}
答案 0 :(得分:1)
这是因为表视图不会将内存中的单元格保留在屏幕外。这是一种优化,可以减少内存使用并加快滚动速度。
cellForRowAtIndexPath:
返回值
表示表格单元格的对象,如果单元格不可见或indexPath超出范围,则为nil。
您只能访问目前实际可见的单元格。
答案 1 :(得分:1)
UITableView将单元格排队以便重复使用。这意味着如果您有100行,则无法保证它将创建100个单元格。通常它只会创建可见的单元格,然后重新使用它们来显示其余的项目。这是以某种方式实现如下:
static NSString *MyCellIdentifier = @"MyCellIdentifier";
UITableViewCell* cell = [tv dequeueReusableCellWithIdentifier:MyCellIdentifier];
//dequeueReusableCellWithIdentifier will give you the cells that has been added to queue after scroll and are ready for re-use.
if(cell == nil){
// create new.
}
从技术上讲,你无法获得所有细胞。可以应用替代方案,直到您告诉您要完成的确切目的。