从Modal View Controller返回RootViewController

时间:2013-05-29 22:56:02

标签: ios objective-c uiviewcontroller uinavigationcontroller storyboard

从主页视图 - 我的RootViewController - 随着用户在导航层次结构中的进展,我一个接一个地打开2个ViewControllers,如下所示:

1)SecondViewController被我的Storyboard中连接的按钮推送

2)ThirdViewController以模态方式呈现

[self performSegueWithIdentifier:@"NextViewController" sender:nil];

所以,图片是:RootViewController - > SecondViewController - > ThirdViewController

现在在我的ThirdViewController中,我希望有一个按钮可以返回2次到我的RootViewController,即回家。但这不起作用:

[self.navigationController popToRootViewControllerAnimated:YES]; 

只有这个人回到SecondViewController

[self.navigationController popViewControllerAnimated:YES];

如何同时删除模态和推送视图控制器?

3 个答案:

答案 0 :(得分:20)

我有类似的情况,我将许多视图控制器推入导航控制器堆栈,然后最后一个视图以模态方式呈现。在模态屏幕上,我有一个取消按钮,返回到根视图控制器。

在模态视图控制器中,我有一个在点击取消按钮时触发的动作:

- (IBAction)cancel:(id)sender
{
    [self.delegate modalViewControllerDidCancel];
}

在这个模态视图控制器的标题中,我声明了一个协议:

@protocol ModalViewControllerDelegate
- (void)modalViewControllerDidCancel;
@end

然后导航堆栈中的最后一个视图控制器(呈现模态视图的控制器)应该实现ModalViewControllerDelegate协议:

- (void)modalViewControllerDidCancel
{
    [self dismissViewControllerAnimated:NO completion:nil];
    [self.navigationController popToRootViewControllerAnimated:YES];
}

上述方法是重要的部分。它使呈现视图控制器关闭模态视图,然后弹出回根视图控制器。请注意,我将NO传递给dismissViewControllerAnimated:并将YES传递给popToRootViewControllerAnimated:以便从模态视图到根视图获得更平滑的动画。

答案 1 :(得分:4)

我有相同的要求,但在视图控制器之间使用自定义segue。我想到了“Unwind Segue”的概念,我认为它与iOS6一起出现。如果您的目标是iOS6及更高版本,这些链接可能有所帮助: What are Unwind segues for and how do you use them? http://chrisrisner.com/Unwinding-with-iOS-and-Storyboards 感谢。

答案 2 :(得分:0)

假设您的AppDelegate被称为AppDelegate,那么您可以执行以下操作,这将重置应用程序窗口的rootviewcontroller作为视图RootViewController

AppDelegate *appDel = (AppDelegate*)[[UIApplication sharedApplication] delegate];
RootViewController *rootView = [[RootViewController alloc] init];
[appDel.window setRootViewController:rootView];