是否可以弹出UINavigationController两次?

时间:2012-05-30 19:20:57

标签: ios uinavigationcontroller

是否可以弹出导航控制器两次?我有这个导航结构:

查看一个---->查看两个----->查看三个

我想要完成的是,通过View Three上的一行,直接返回View One。我通过protocol-delegate从三到二完成了它,但是在视图中设置委托一个不起作用并设置两个连续的委托协议都弹出导航控制器,给我错误:嵌套导航控制器活动(或类似的东西) )。

任何帮助将不胜感激。提前谢谢!

4 个答案:

答案 0 :(得分:33)

有一些流行选项

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
  • 第一个弹出顶部控制器。
  • 第二个允许您弹出整个堆栈以到达根目录。
  • 第三个允许你弹出任何你引用的viewController。您可以使用self.navigationController.viewControllers获取viewController,然后使用该数组来获取要弹出的特定viewController

答案 1 :(得分:13)

使用以下代码。您可以使用任意数字而不是-3来弹出到不同的级别。

的OBJ-C:

ViewController *View = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-3];
    [self.navigationController popToViewController:View animated:YES];

Swift 3.0 *:

let controller = self.navigationController?.viewControllers[(self.navigationController?.viewControllers.count)! - 3]        
self.navigationController?.popToViewController(controller!, animated: true)

答案 2 :(得分:7)

你可以试试这个

[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:1] animated:YES];

希望它能帮助!!

答案 3 :(得分:4)

'self'似乎是在第一次弹出后发布的

UINavigationController *navigationController = self.navigationController;
[navigationController popViewControllerAnimated:NO];
[navigationController popViewControllerAnimated:YES];