1

我有一个UITableView高度为 180px 的,一次只能显示 5 行,表格视图包含自定义单元格。但是,我有 6 个单元格,这意味着只有在使用滚动时才会显示第六个单元格,当我尝试像这样遍历所有单元格时:

  for (int row = 0; row < [self.autoTableView numberOfRowsInSection:0]; row++)  {

    NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:0];
    UITableViewCell *cell = [self.autoTableView cellForRowAtIndexPath:cellPath];

    if(!cell)
        NSLog(@"NULL %i", row);

 }

在运行时,如果我没有滚动,我会NSLog在控制台窗口中看到一条语句:NULL 5,当我向下滚动以显示最后一个单元格时,我会得到一条语句NSLog:上下滚动,为什么会发生这种情况,尽管所有单元格都已经创建?NULL 0NSLog

cellForRowAtIndexPath代码是:

static NSString *customCellIdentifier = @"customCell";
EditableTableDataRow *cell = nil;

cell = (EditableTableDataRow *)[tableView dequeueReusableCellWithIdentifier:customCellIdentifier];
if (cell == nil)
{
    cell = [[[EditableTableDataRow alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:customCellIdentifier itemPadding:0 scaleToFill:NO] autorelease];
}

然后我在这个自定义单元格内的标签和文本字段上做各种事情,最后:

...

 return cell;

非常感谢你。

4

2 回答 2

3

这是默认行为。当未显示单元格时,它们会从内存中释放。你对它们所做的每一次修改都应该在cellForRowAtIndexPath:方法中完成,也就是它们被创建的时候。将您的数据加载到内存中,以便在创建单元格时,它可以很快被填满。这就是您获得平滑滚动的方式。

于 2012-04-18T06:17:08.257 回答
0

将创建的单元格数量取决于视图上显示的单元格数量。在您的情况下,仅创建了 5 个单元格。

单元格 = (EditableTableDataRow *)[tableView dequeueReusableCellWithIdentifier:customCellIdentifier];

此行将使 tableview 重用创建的单元格。因此,当您向下滚动时,您的第一个单元格将消失,以便在您的情况下为第一行创建的单元格用于第 6 行。

希望能帮助到你。

于 2012-04-18T06:07:13.700 回答