推送后重新加载UITableViewCell

时间:2014-12-16 08:55:50

标签: ios objective-c uitableview

AViewController 中有一个UITableView包含一些数据,调用

[self.navigationController pushViewController:bViewController animated:YES]

推送 bViewController ,在 bViewController 中执行某些操作后, aViewController 中选择的单元格将更改某些信息(例如更新读取计数) )。

我的解决方案:

  1. aViewController
  2. 中添加通知
  3. 使用参数(选定单元格的indexPath)在 bViewController 中发布通知
  4. bViewController 获取通知时,重新加载indexPath的单元格。
  5. 现在我遇到了这个问题:
    大部分时间没有问题,但有时候应用程序会崩溃,问题是  带有indexPath的 aViewContrller 中的单元格(来自bViewController发布的通知)**是不可见的

2 个答案:

答案 0 :(得分:1)

您可以在viewDidAppeare方法中重新加载整个表视图。 每次从bViewController返回时都会有效。

或者只是为了记住性能,您只能重新加载可见的行:

[tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] 
                 withRowAnimation:UITableViewRowAnimationNone];

或者甚至只重新加载您进行更改的一个单元格,将[tableView indexPathsForVisibleRows]替换为包含要重新加载的单元格的索引路径的数组。

答案 1 :(得分:1)

首先,你不应该使用NSNotifications - 它们用于一对多的关系。在您的情况下,您最好采用Delegate Pattern

此外,您不应更新当前不在屏幕上的表格视图,最好只更新它的数据,当它再次可见时,您可以调用reloadData来对用户可见的数据模型进行更改。