如何在我查看 UITableView 时重新加载它
Posted
技术标签:
【中文标题】如何在我查看 UITableView 时重新加载它【英文标题】:How to Reload a UITableView While I am Looking at It 【发布时间】:2010-10-14 05:54:26 【问题描述】:当我有一个 UITableView 作为可见视图控制器的一部分时,我如何重新加载它,以便我正在查看的数据更改为新数据。只是调用 reload 似乎不会刷新数据,直到我滚动它。
【问题讨论】:
【参考方案1】:以下代码可帮助您在查看时重新加载表格:
[self.tableView reloadData];
【讨论】:
调用这些方法的坏习惯【参考方案2】:调用reloadData
方法会在调用该方法后立即刷新数据。它不会等待表格滚动。在调用 reloadData
之前,确保数据源(数组或字典或保存值的位置)已更改。
【讨论】:
似乎不适用于自定义表格视图单元格。在滚动表格视图之前,数据不会更改。也许我的自定义表格视图单元格方法中有一个错误。 我也使用自定义单元格。对我很有用。您一定错过了代码中的某些内容。能发一下代码吗。也许我们能找到一些东西 如果您使用 nib 文件来设计视图,请不要忘记将代码中调用 reloadData 的表连接到 nib 中的表。这很容易发生,因为您还需要连接委托和数据源。 我在自定义表格视图单元格中遇到了同样的问题。我必须从 ViewWillAppear 调用 loadView 方法来更新单元格,而无需在后续加载时滚动。 注:如果你在 UITableViewController 这是self.tableView.reloadData()
【参考方案3】:
只是2013年的更新,你应该也可以重新加载数据,只要你使用
dispatch_async(dispatch_get_main_queue(), ^
[self.tableView reloadData];
);
GCD 太棒了!
【讨论】:
这应该是公认的答案。如果您希望简单的 reloadData 在没有任何交互的情况下实际刷新 UI,这就是实现它的方法.. 你能进一步解释为什么它应该在主线程上执行吗?【参考方案4】:您是否正在从主线程刷新数据?如果是这样,则需要使用以下方法调用 reloadData 方法:
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
所以对于 tableView 来说应该是:
[tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
【讨论】:
以上是关于如何在我查看 UITableView 时重新加载它的主要内容,如果未能解决你的问题,请参考以下文章