表格单元格在uitableview中是空的

时间:2013-05-17 11:31:08

标签: objective-c uitableview

我有一个包含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];
        }

2 个答案:

答案 0 :(得分:1)

这是因为表视图不会将内​​存中的单元格保留在屏幕外。这是一种优化,可以减少内存使用并加快滚动速度。

来自documentation

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.
}

从技术上讲,你无法获得所有细胞。可以应用替代方案,直到您告诉您要完成的确切目的。