iOS - 关于呈现和推送控制器的问题

时间:2016-02-24 06:16:22

标签: ios pushviewcontroller presentviewcontroller

这里有五个controllers here, AViewController, BViewController, CViewController,DViewController,EViewController,个控制器,

A present---> B
B present---> C
C push--->D
D push--->E

现在,如果我想一步从EViewController返回到AViewController,我应该编写什么代码?

4 个答案:

答案 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];