能否两次弹出UINavigationController?

12

有没有可能连续弹出导航控制器两次?我有这个导航结构:

视图一 ----> 视图二 ----> 视图三

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

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

4个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
38

有几个弹出选项

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

17

使用以下代码。您可以使用任何数字代替-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)

8
你可以试试这个。
[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:1] animated:YES];
希望能帮到你!

3

'self' 在第一次出栈后似乎被释放了

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,