我有一个有四个选项卡的应用程序。我有四个 UINavigationController,每个 Controller 都通过设置每个 Controller 的 TabBarItem 属性绑定(bind)到 UITabBarController,然后将 Controller 添加到 UITabBarController。这就是所有标准的 iOS 费用。
其中一个选项卡加载了一个 UITableView,该 UITableView 显示来自远程 Web 服务的一些数据。因为 Web 服务调用通常需要大约 1.5 秒才能完成和反序列化,所以我想在选择相应选项卡时显示带有文本“正在加载...”的“正在加载”UIView。我已经尝试了几种方法:
将委托(delegate)分配给 UITabBarController 上的 ViewControllerSelected 事件,并检查以确保所选 Controller 是我感兴趣的 Controller 。然后我尝试显示“正在加载”的 UIView。这一切都发生在 AppDelegate 中;
覆盖 Controller 本身的 ViewWillAppear 和 ViewWillDidAppear 方法。在 ViewWillAppear 方法中显示 LoadingHUDView,在 ViewDidAppear 方法中隐藏。
在这两种情况下:
- “正在加载”的 UIView 是一个局部变量 (lhv),并且已经设置了我想要的文本。
- lhv.SharedApplication.KeyWindow.Add(lhv);
- lhv.StartAnimating(); (UIView 包含一个 UIActivityIndicatorView)
- 执行服务调用并刷新 UITableView
- lhv.StopAnimating();
- lhv.RemoveFromSuperview();
(是的,我知道我不需要在 AppDelegate 中使用 lhv.SharedApplication.KeyWindow,因为我有可用的本地“窗口”成员。)
问题在于“正在加载”的 UIView 直到 UINavigationController 呈现其 View 后才会呈现。我希望 LoadingHUDView 在 UITabBarController 被点击时立即出现。我也尝试过使用 InvokeOnMainThread(),但没有成功。
有什么想法吗?
最佳答案
>.< 想通了。只需在 ViewWillAppear 或 ViewDidAppear 开始时在新线程中启动加载 UIView。然后只需要在相应方法的末尾通过从父 View 中删除 View 来进行清理。早就该想到了!哦!
关于ios - 选择 UITabBarController 中的特定项目时,关于触发 "loading"UIView 有什么想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5383082/