加载视图后如何在运行时更新 UITableView

Posted

技术标签:

【中文标题】加载视图后如何在运行时更新 UITableView【英文标题】:How to update UITableView at run time, after the view is loaded 【发布时间】:2011-12-19 12:54:15 【问题描述】:

我已经阅读了几篇关于 UITableView 的文章,包括official doc 和一些关于 SO 的文章。但我的情况似乎有所不同。 我想在每次加载视图时更新表。而且我必须使用 HTTP 请求获取数据。 我现在得到的是:

    进入表格视图时,我应该使用非同步HTTP请求来更新数据。因为我不希望主线程等待。这样做的一个地方是tableView:cellForRowAtIndexPath: 方法。所以我返回0,因为一开始不存在数据。 当我得到 HTTP 响应时,我使用 beginUpdates endUpdates insertRowsAtIndexPaths:withRowAnimation: 更新主线程上的行 而且我必须同时更新“数据源”,但是该怎么做呢? 或者我应该创建一个守护线程并每隔一段时间更新我的数据?以便在加载 TableView 时准备好数据。

【问题讨论】:

作为记录,您可以参考一个不同步的请求,如asynchronous。这听起来不应该是高傲的。问候,托马斯。 【参考方案1】:

你会这样做:

有一个布尔值或某个变量,您可以在其中可靠地检测您是否拥有所有数据。 在viewWillAppear 中,重置所有内容。开始加载您的数据。 如果您还没有数据,则只显示一个带有一个单元格的部分(例如,一个占位符单元格,显示为 “正在加载...” 并显示一个微调器)。 数据完全加载后,您可以设置布尔值或其他值。 致电[self.tableView reloadData];

在您的所有UITableViewDataSource 方法中,您需要检查您是否已经获得数据。如果不是,则返回占位符数据。

【讨论】:

【参考方案2】:

[你的表名 reloadData];将帮助您重新加载 tableview 中的数据,一旦您从服务器获得响应,您就可以调用它

【讨论】:

【参考方案3】:

我不确定您在这里尝试完成的任务是否有“最佳方法”。我建议尝试您使用的方法,看看它是否提供了足够的用户体验(无论这对您意味着什么),如果没有,请尝试其他方法。我肯定会建议在表为空并等待 http 响应时使用某种“加载”指示器。

就您关于“数据源”的问题而言,UITableView 的数据源只是一个实现UITableViewDataSource 协议的对象,您可以阅读有关here 的信息。通常,您会让 XCode 设置一个 UITableViewController 对象,该对象将充当表视图的委托和数据源。如何实际存储数据取决于您。数据源协议只是提供了表格视图“询问”它需要加载的数据的方法。

【讨论】:

以上是关于加载视图后如何在运行时更新 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

更新数据异步后重绘 UITableView

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

如何更新表格视图单元格?

重新加载 UITableView 数据而不重新加载视图?

在搜索期间重新加载 UITableView

UITableView 重新加载时闪烁