【发布时间】:2011-12-20 15:39:07
【问题描述】:
我有一个应用程序,它有一个带有各种自定义 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: 并在该调用中 dequeueReusableCellWithIdentifier: 返回 nil,尽管刚刚离开屏幕的单元格与我插入的类型相同(相同的单元格标识符)。
不应该给一个可重复使用的细胞吗?就我而言,这可能会成为问题,因为我的单元格由于其复杂性而具有某种“繁重”的 init 方法。
提前致谢
Edit1:为了澄清,我想知道为什么表缓存中没有未使用的单元格实例返回,因为某些单元格(我插入的相同类型)刚刚退出可见?
【问题讨论】:
-
这是正常行为,您插入的单元格尚不存在,因此控制器必须实例化它。
-
但是我插入的单元格与刚刚退出可见的单元格的类型(和标识符相同)相同,现在应该可以重复使用,不是吗?
标签: iphone objective-c uitableview reuseidentifier