是否可以将 UINavigationController 弹出两次? [复制]

Posted

技术标签:

【中文标题】是否可以将 UINavigationController 弹出两次? [复制]【英文标题】:Is it possible to pop the UINavigationController twice? [duplicate] 【发布时间】:2012-05-30 19:20:57 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

有几个弹出选项

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

你可以试试这个

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

希望对你有帮助!!

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于是否可以将 UINavigationController 弹出两次? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 UINavigationController 中设置自定义导航栏类

在 UINavigationController 中设置自定义导航栏类

UITabBarNavigationController 中的 UINavigationController 不加载表数据

在 Swift 2.0 中设置 UINavigationController 栏标题

UINavigationController -> UIViewController -> UIView -> UITableViewController?

用动画隐藏导航控制器和标签栏控制器