如何在两个屏幕之间显示加载微调器

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
        

【讨论】:

以上是关于如何在两个屏幕之间显示加载微调器的主要内容,如果未能解决你的问题,请参考以下文章

如何在MVC视图之间显示“正在加载”

当我使用顺风和元素加载时,加载微调器不在屏幕中心,如何解决?

如何在android Fragment中为webview显示全屏加载微调器?

如何在微调器项目之间显示分隔符?

HTML5 视频:在视频和海报之间显示加载器/微调器

在显示加载微调器之前等待?