这里有五个controllers here, AViewController, BViewController, CViewController,DViewController,EViewController,
个控制器,
A present---> B
B present---> C
C push--->D
D push--->E
现在,如果我想一步从EViewController返回到AViewController,我应该编写什么代码?
答案 0 :(得分:2)
[self.navigationController popToRootViewControllerAnimated:animated];
答案 1 :(得分:1)
1)获得理想的ViewController如下
for (id controller in [self.navigationController viewControllers])
{
if ([controller isKindOfClass:[AViewController class]])
{
[self.navigationController popToViewController:controller animated:YES];
break;
}
}
2)这里有A,B,C,D,E控制器。意味着A将在1个位置,所以你能做什么
您可以将索引硬连接到下面
[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:0] animated:YES];
3)弹出第一个viewController或rootViewController
[self.navigationController popToRootViewControllerAnimated:animated];
答案 2 :(得分:0)
使用展开segues。
在AViewController中添加以下代码
-(IBAction)prepareForUnwind:(UIStoryboardSegue *)segue {
}
转到EViewController的用户界面,然后从按钮(您想要设置操作)按住Ctrl键拖动到“退出”插座,您将看到一个模态弹出窗口。
答案 3 :(得分:0)
您可以使用通用解决方案递归执行此操作。首先你应该参考A的导航控制器然后你应该编写递归方法来获得有效的导航控制器,如:`
-(UINavigationController*)getActiveNavigationController : (UINavigationController*)navigationController {
if ([navigationController.presentedViewController isKindOfClass:[AViewController class]]) {
return [self getActiveNavigationController:(UINavigationController*)((AViewController*)navigationController.presentedViewController)
];
}
if ((UINavigationController*)navigationController.presentedViewController == nil) {
return navigationController;
}
return [self getActiveNavigationController:(UINavigationController*)navigationController.presentedViewController];
}
`
之后你应该写像
这样的方法-(void)getInitialScreen:(UINavigationController*)AViewControllerNavigationController {
if ([AViewControllerNavigationController.presentedViewController isKindOfClass:[AViewController class]]) {
return;
}
UINavigationController *navigation = [self getActiveNavigationController:AViewControllerNavigationController];
[navigation dismissViewControllerAnimated:YES completion:^{
[self getInitialScreen:AViewControllerNavigationController];
}];
}
最后你写了这两个方法之后。你可以像下面这样调用它们,你可以随时获得AViewController
[self getInitialScreen:AViewControlelrnavigationcontroller];
[AViewControlelrnavigationcontroller popToRootViewControllerAnimated:YES];