如何在两个屏幕之间显示加载微调器
Posted
技术标签:
【中文标题】如何在两个屏幕之间显示加载微调器【英文标题】:How to show loading spinner between two screens 【发布时间】:2014-04-28 11:51:06 【问题描述】:我有一个包含两个UITableViewControllers
的应用程序。单击第一个表视图中的单元格会从服务器获取数据,然后将用户带到第二个表视图。
当用户点击时,我正在从服务器加载数据,然后显示第二个表格视图。因此,由于数据是从服务器加载的,因此在这两者之间会有几分之一秒的延迟。
我想在用户单击第一个表格控制器中的单元格时立即显示“加载”微调器,并在从服务器获取数据时让“加载”微调器消失。
这就是我目前正在做的事情:
Class FirstController < UITableViewController
...
def tableView(tableView, didSelectRowAtIndexPath:indexPath)
initAFNetworkingClient
Colors.fetch(AFMotion::Client, self.data[indexPath.row]["id"]) do |data|
self.navigationController.pushViewController(SecondController.alloc.initWithData(data, self.data[indexPath.row]), animated:true)
end
end
...
end
【问题讨论】:
为什么不显示第二个视图并让它显示一个微调器,直到它获得所需的数据? 我试过这样做。我立即展示了第二个视图,并在第二个视图的 viewDidLoad 方法中从服务器加载了数据。但是,由于来自服务器的数据是异步加载的,我会收到错误,因为表视图需要立即获取数据。 所以你编码错误(或者如果表必须有数据,则设计错误)。在数据可用之前,该表应该只有一个空数组(行数为零)。 这正是我所做的。编码错误。我numberOfRowsInSection
我正在检查是否有任何数据,如果没有,我正在添加一行以建议“没有数据......添加更多”。整个块需要检查以查看是否有任何数据尚未开始。谢谢。
【参考方案1】:
-
异步获取数据
提取开始后立即启动微调器。 MDProgressHUD 是一个很好的库。
获取完成后停止微调器。
确保在主线程中进行 UI 更改。
dispatch_async(dispatch_get_main_queue(), ^
// main thread tasks here
【讨论】:
以上是关于如何在两个屏幕之间显示加载微调器的主要内容,如果未能解决你的问题,请参考以下文章
当我使用顺风和元素加载时,加载微调器不在屏幕中心,如何解决?