我有一个带有关联tableView的表视图控制器。此列表中的单元格还包含tableViews,或者更具体地说,单元格具有tableView,并且单元格的每个实例都使用嵌入式tableView来显示略有不同的名称列表。这是一个图表:
嵌入式tableView没有视图控制器。委托和dataSource都映射到嵌入式tableView类。这是基于故事板的。
在模拟器上,这个设置适用于列表中显示的前几个单元格 - 每个单元格都显示自己的名称列表 - 但是在第四个或第五个单元格之后(是的,我已经多次在屏幕外滚动)过),单元格仍然显示,但它们不是由嵌入的表格视图生成的;他们有旧的和不正确的名单。此时,对于嵌入式tableView既没有awakeFromNib也没有调用initWithCoder(两者都是为成功显示的单元格调用的)。
这意味着(对我来说)父tableView(拥有嵌入了tableViews的单元格的那个)正在重用它从重用列表中取出的单元格。这提出了一些问题:
为什么不尝试重建细胞?在父tableView的tableView:cellForRowAtIndexPath中,我得到一个单元格,并用一些信息填充它(例如,单元格中还有一个UILabel,所以我可以识别它)并且新的内容可以工作,但嵌入式tableView部分是单元格未重建。
如果这是从某些缓存中提取重用单元格的情况,我如何将每个缓存的项目标记为“脏”以便重建?我知道tableView:didEndDisplayingCell:forRowAtIndexPath:但我不知道如何使用它来完成重建。例如,我试图删除单元格(即,cell = nil),但这没有帮助(我在父tableView和嵌入式tableView上都这样做了。)
在prepareForReuse的讨论中(我没有尝试,因为我想更改属性),它说,“tableView中的表视图的委托:cellForRowAtIndexPath:应该始终重置所有内容重用一个单元格时如果单元对象没有关联的重用标识符,则不会调用此方法。如果你重写这个方法,你必须确保调用超类实现。“这正是我正在尝试做的事情,但是嵌入式tableView以某种方式逃避了这一点(回溯到既没有awakeFromNib也没有调用initWithCoder。
谢谢。