如何在我查看 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 时重新加载它的主要内容,如果未能解决你的问题,请参考以下文章

UITableView如何在重新加载后继续滚动

当我动态更改其框架时,即使重新加载后 UITableView 内容大小也不会更新

UITableView 重新加载时闪烁

如何在uitableview中加载数据而不每次都重新加载

SwiftyJSON 没有重新加载 UITableView

UITableView - 从单独的类中重新加载数据