使用SVProgressHUD缓慢容器视图交换不起作用

时间:2014-03-14 04:42:59

标签: ios uitabbar uicontainerview svprogresshud

我有几个视图,我根据自制的标签栏交换进出UIContainerView。其中两个视图中有很多子视图(一个有大约30个UISwitch,另一个大约有20个UITextField)。当我将这两个视图切换进去时,他们需要一些时间来绘制...每个约1.5秒。我打开和关闭的其他视图并不那么重,基本上可以立即切换。

所以,我想在绘制视图时使用SVProgressHUD进行显示,但似乎无论我在哪里放置[SVProgressHUD show]代码,HUD只是暂时显示,在点击按钮后很好在视图加载并显示在containerView中之后。

为了打败这个,我把调用显示HUD显示在 - (void)tabBar:(UITabBar *)tabBar didSelectItem:ViewController中我的标签栏的方法,用于交换containerView。我的想法是,当点击标签栏按钮时,我会显示HUD,检查点击了哪个按钮,将旧视图从容器中交换出来(带有所有固定件),将新视图交换到容器中(全部修正),然后在交换视图的ViewDidAppear中我将解雇HUD。

然而,当我点击标签栏按钮时,不会显示HUD。我在didSelectItem回调中调用HUD之后立即放置了一条NSLog行,奇怪的是,在HUD显示之前很好地记录了NSLog文本。大约1.5秒后,HUD显示并立即被交换视图的viewDidAppear方法中的[SVProgressHUD dismiss]调用解除。我希望在按下按钮时显示HUD,在交换视图时保持在屏幕上,然后被解雇。

另一件事是,当我点击标签栏中的按钮时,它不会立即切换到屏幕上栏中的新按钮...但是,那个健全的NSLog行会立即执行 按下按钮时,我已经提到了。

我知道这是一个复杂的问题,并且有很多与之相关的真实代码,我觉得最好只描述一下这个问题,并希望找到一些关于在哪里寻找或寻找什么的建议。

但是,这里有一些伪/部分代码来显示的工作原理:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {

    [SVProgressHUD show];
    NSLog(@"Just hit a button!");  // this gets logged well before the HUD is shown!!!

    if (the item title is the first button's title) {
      // swap the containerview's view and view controller for the first view
    else if (the item title is the second button's title) {
     // swap the containerview's view and view controller for the second view
    else ... continue like this for the other views
 }

并且在每个交换视图的viewController的viewDidAppear中我有:

   [SVProgressHUD dismiss];

最后一条评论:我没有使用UITabBarController,因为该应用程序实际上并未通过此标签栏导航 - 它只是其中一个视图的一部分,负责管理该视图中的容器视图。

感谢。

0 个答案:

没有答案