当表视图不可见时,不会调用cellForRowAtIndexPath

时间:2015-03-01 01:10:02

标签: ios objective-c uitableview

关于这个主题有很多问题和答案,但我找不到这种情况。

该应用程序已投入生产约3年,因此我确信所讨论的表格视图和所有其他表格视图已正确连接。我添加了一项新功能,但我遇到了一些我没想到的事情。

以下是这种情况:

  • 用户点击标签1,在表格视图中显示项目列表。
  • 用户点击标签2并导入更多项目。
  • 通知被解雇。
  • 选项卡1上视图控制器上的观察者接收通知并调用其选择器。
  • 选择器更新模型并调用reloadData:
  • 调用
  • numberOfRowsInSection:并返回正确的行数。

到目前为止,一切都在发挥作用,就像我期待的那样。但那就是它停止的地方。 numberOfRowsInSection:之后没有别的。 cellForRowAtIndexPath:未被调用。

显然,我重新加载的表格视图不可见。它在另一个标签上。

这种行为是一种优化,因为表格不可见而导致reloadData根本没有被执行?谁能证实这一点?

2 个答案:

答案 0 :(得分:4)

除了表视图调用numberOfRowsInSection:的部分外,这对我来说非常有意义。当VC不可见时,我不希望这样。

如果表视图不在当前视图层次结构中,则不会绘制。

答案 1 :(得分:1)

正如Duncan所指出的,VC不会重新加载tableView,除非它在当前视图层次结构中。我最近一直在研究一个使用大量KVO来更新tableViews的应用程序,我能想出的最好的解决方案就是通过在viewController上使用属性BOOL needsRedraw将视图标记为脏。然后当在viewController中调用viewWillAppear:时,您应该能够重新加载tableview