加载视图后如何在运行时更新 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的主要内容,如果未能解决你的问题,请参考以下文章