12

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

查看一---->查看二----->查看三

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

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

4

4 回答 4

37

有几个弹出选项

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

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

对象-C:

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

斯威夫特 3.0*:

let controller = self.navigationController?.viewControllers[(self.navigationController?.viewControllers.count)! - 3]        
self.navigationController?.popToViewController(controller!, animated: true)
于 2013-06-11T11:08:35.063 回答
8

你可以试试这个

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

希望能帮助到你!!

于 2013-08-07T12:13:57.060 回答
3

'self' 似乎在第一次流行之后被释放

UINavigationController *navigationController = self.navigationController;
[navigationController popViewControllerAnimated:NO];
[navigationController popViewControllerAnimated:YES];
于 2012-11-24T09:26:54.817 回答