如何从UITabBarController启动的控制器链接模态视图

时间:2011-03-18 01:09:16

标签: iphone uiviewcontroller uitabbarcontroller

我如何从UITabBarController的视图中链接几个模态控制器? Apple的View Programming Guide说这是可行的,但是当我尝试这样的任务时,我得到错误,

"*Assertion failure in -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:], /SourceCache/UIKit_Sim/UIKit-1447.6.4/UIWindowController.m:186

类层次结构是这样的:

UITabBarController - > 1 child是一个名为Tab1Controller的UIViewController继承类。

Tab1Controller - >协调需要以模态方式呈现的2个控制器中的每一个。 启动1个模态UIViewController,当它完成时(通过回调调用),解散它然后启动另一个模态UIViewController。

好像两个模态控制器在结束和开始之间没有足够的时间。

是否有任何示例代码显示如何将一个模态控制器放在另一个模式控制器之后?

3 个答案:

答案 0 :(得分:0)

  

就好像两个模态控制器之间没有足够的时间结束和开始。

我觉得你的头上钉了一针。在上一个模态视图控制器完成消失之前,您无法呈现新的模态视图控制器,并且在旧模式视图覆盖的视图控制器上调用viewDidAppear:方法。

另一个选择是在第一个模式视图的顶部显示第二个模态视图,例如

[firstModalViewController presentModalViewController:secondModalViewController animated:YES]

然后,您可以拨打[firstModalViewController dismissModalViewControllerAnimated:YES]以解除第二个(返回第一个),或[self dismissModalViewControllerAnimated:YES]同时解除两个。

答案 1 :(得分:0)

请参阅我对这个问题的回答:

Correct way of showing consecutive modalViews

答案 2 :(得分:0)

// present modal view inside another presented modal view

    FirstViewController *firstVC = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: firstVC];

    // Note: you can use your viewcontroller instead self.window.rootViewController

    [self.window.rootViewController presentViewController:navController animated:YES completion:^{
                //code...
                    SecondViewController *secondVC = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

                    [navController presentViewController: secondVC animated:YES completion:nil];

                }
            }];