0

我有一个带有关联表视图的表视图控制器。此列表中的单元格还包含 tableViews,或者更具体地说,该单元格具有一个 tableView,并且该单元格的每个实例都使用嵌入的 tableView 来显示略有不同的名称列表。这是一个图表:

  1. 父表视图
  2. __tableViewCell
  3. ____嵌入式表格视图
  4. ______name1(在单元格中)
  5. ______名字2“
  6. ______姓名3“</li>

嵌入式 tableView 没有视图控制器。委托和数据源都映射到嵌入的 tableView 类。这都是基于故事板的。

在模拟器上,这个设置对于列表中显示的前几个单元格非常有效——每个单元格都显示自己的名称列表——但是在第四个或第五个单元格之后(是的,我已经在屏幕外滚动了几次),单元格仍然显示,但它们不是由嵌入式表格视图生成的;他们有旧的和不正确的名单。此时,嵌入式 tableView 既不会调用 awakeFromNib 也不会调用 initWithCoder (对于成功显示的单元格都会调用这两者)。

这意味着(对我而言)父 tableView(拥有具有嵌入式 tableViews 的单元格的那个)正在重用它正在退出重用列表的单元格。这带来了一些问题:

  1. 为什么不尝试重建细胞?在父 tableView 的 tableView:cellForRowAtIndexPath 中,我得到一个单元格并用一些信息填充它(例如,单元格中还有一个 UILabel 以便我可以识别它)和新的内容,但是嵌入的 tableView 部分单元格未重建。

  2. 如果这是从某个缓存中提取重复使用的单元格的情况,我如何将每个缓存项标记为“脏”以便重建它?我知道 tableView:didEndDisplayingCell:forRowAtIndexPath: 但我不知道如何使用它来完成重建。例如,我试图删除单元格(即,cell = nil),但这没有帮助(我在父 tableView 和嵌入的 tableView 上都这样做了)。

  3. 在讨论 prepareForReuse (我没有尝试,因为我想更改的不仅仅是属性),它说,“tableView:cellForRowAtIndexPath: 中的表视图的委托:在重用单元格时应该始终重置所有内容。如果单元对象没有关联的重用标识符,则不调用此方法。如果你重写这个方法,你必须确保调用超类实现。” 这正是我想要做的,但嵌入的 tableView 以某种方式逃避了这一点(回想起既没有调用 awakeFromNib 也没有调用 initWithCoder 。

谢谢你。

4

0 回答 0