1

我正在从 tableview1.row 导航到 tableview2,它有很多行被获取。鉴于加载时间约为 3 秒,我希望导航在选择 tableview1.row 后立即滑入 tableview2,然后在 tableview2 上方显示 UIActivityIndi​​catorView,同时获取数据并在其基础表视图中呈现。注意,tableview2 实际上是父 UIView 的子视图(而不是父 UITableView)。

我看过这篇文章:Activity indicator should be display when navigating from UITableView1 to UITableView2

...它给出了将数据获取周围的活动指示器 start 和 stopAnimating 调用添加到 tableview2 的 viewDidLoad 的指令。

问题是,我不确定上述解决方案如何工作,因为 viewDidLoad 在 tableview2 明显滑入视图之前运行和完成。

另外,我还尝试在 IB 中的 tableview2 上添加一个活动指示器,并将 IBOutlet 指示器的开始/停止动画代码添加到 viewDidAppear 中。发生的情况是数据提取运行,我可以看到指示器在旋转,但在提取结束时,表视图为空。似乎 viewDidAppear 为时已晚,无法将数据添加到表视图中,因为 cellForRowAtIndexPath 等已经触发。

任何人都可以提出任何建议吗?我很可能在这里遗漏了一些明显的东西(我现在快凌晨 5 点了,我觉得我的大脑很糊状)。我应该从 viewDidAppear 重新触发 cellForRowAtIndexPath 等吗?我的表视图是子视图而不是父视图的问题吗?

谢谢

4

1 回答 1

1

我又看了看自己的问题,答案实际上很简单。任何非常密集的处理通常不应该在主线程上运行。我试图在同一个线程上进行我的数据密集型获取和活动指示器的 UI 显示,因此这些都是按顺序处理的,一个接一个。

解决方案是进入我的新视图控制器,然后 a) 在主线程上启动活动指示器动画,然后 b) 在另一个线程上运行数据密集型获取(使用 performSelectorInBackground)。无法从后台线程应用任何与 UI 相关的更新。这些应该交还给主线程。

已经有很多关于这个的帖子了(这里的例子),我从一开始就没有接受这些是我的坏事:)

于 2010-05-03T13:15:26.897 回答