1

我有一个具有各种自定义 UITableViewCells(和单元格标识符)的 UITableView 的应用程序。

在我实现tableView:cellForRowAtIndexPath:的方法中,我使用了 UITableView 的dequeueReusableCellWithIdentifier:方法,它在用户滚动表格期间调用时给了我预期类型的​​ UITableViewCell,但是,如果我尝试在代码的其他部分检索可重用单元格,我将得到 nil结果,因此必须实例化一个新单元格。

例如,插入要显示的新对象的代码如下所示:

...
[myDataSource addObject:newObject];
...
[self.tv beginUpdates];
[self.tv insertRowsAtIndexPaths:paths withRowAnimation:rowAnimation];
[self.tv endUpdates];
...

尽管刚刚离开屏幕的单元格与我插入的类型相同(相同的单元格标识符),但这会触发tableView:cellForRowAtIndexPath:and 在该调用上返回 nil 。dequeueReusableCellWithIdentifier:

不应该给一个可重复使用的细胞吗?就我而言,这可能会成为问题,因为我的单元格由于其复杂性而具有某种“重”的 init 方法。

提前致谢

Edit1:为了澄清,我想知道为什么表缓存中没有未使用的单元格实例返回,因为某些单元格(我插入的相同类型)刚刚退出可见?

4

1 回答 1

4

使用中的每个单元都需要它自己的唯一实例。当您滚动表格时,iOS 会缓存不再使用的单元格,这些未使用的实例由tableView:dequeueReusableCellWithIdentifier:. 在您的情况下,缓存中没有未使用的实例要返回。

就您的 init 方法而言,您不应该在那里做任何耗时的事情。例如,如果您正在下载远程内容以显示在单元格中,您应该在后台执行此操作,并在完成后更新表格/单元格。

于 2011-12-20T15:43:23.887 回答