从主页视图 - 我的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];
如何同时删除模态和推送视图控制器?
答案 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];