在UITabBarController选项卡选择之前添加“正在加载”?

时间:2009-03-03 21:01:57

标签: iphone cocoa-touch

我的UITabBarController的一个标签需要一些时间才能显示。

在viewcontroler完成其工作之前显示“正在加载”的最佳方法是什么?

我尝试在选项卡的viewController的viewDidLoad方法中设置“now loading”视图,然后我在viewDidAppear中进行工作,设置一个标志,以便下次通过viewDidAppear不再重复工作。

但是,我从未看到“正在加载”视图......必须完成一些优化 - 在TabBarControllerDelegate didSelectViewController之前调用viewcontroller的viewDidAppear。

是否有一个UITabBarController机制允许在显示viewcontroller之前显示占位符视图?

有什么想法吗?

谢谢 - 马特

3 个答案:

答案 0 :(得分:2)

我可能是错的,但也许你的问题是,通过在viewDidAppear中执行耗时的工作,您将阻止主事件线程,以便在工作完成之前视图不会更新。即你在viewWillAppear中设置了“now loading”,但是你从来没有看到它,因为在viewDidAppear完成之前,它完成了繁重的工作。

答案 1 :(得分:2)

NSObject的performSelector:withObject:afterDelay:方法在这里很有用。显示“请稍候”警报或视图,或者其他任何内容,然后使用performSelector:withObject:afterDelay:开始实际工作。您的加载将延迟到下一次执行事件循环之后,此时用户界面将被重新绘制。

答案 2 :(得分:1)

这里使用的技术是:

  1. 在您的帐号中添加“加载视图” 控制器的viewWillAppear:viewDidLoad:方法
  2. 然后,产生一个新的线程来做 实际装载(或任何时间 你正在做的消费过程)
  3. 完成后,发送消息给 控制器(使用委托 模式,例如) “加载”已完成
  4. 最后,删除加载视图和 让用户继续
  5. 这样做会使应用程序界面仍然可用,即使特定视图控制器正忙。

    没有构建方法可以做到这一点,你必须自己编写代码。