ios - 如何打破导航 Controller 链

标签 ios modalviewcontroller segue pushviewcontroller uistoryboardsegue

在我的项目中,我有以下导航 Controller 链

Home controller -> Table View controller -> Page View Controller 

现在在页面 View Controller 中,在所有页面至少查看一次之后 - 我想自动转到完全不同的 View ,即测验 View 。

Quiz Controller-> Result Controller -> Another Quiz Controller-> Result controller -> Yet another quiz Controller -> Result Controller -> Back to Home Controller

有 3 种不同的测验。在完成所有三项测验后,我想回家。另外,在每个结果 Controller 中,我想提供一个返回主页的选项。当到达主视图时,应该重新启动。

在任何中间阶段,我都不想通过链返回,即不需要中间 Controller 。那么应该使用什么segue来达到这个目的呢?

我反对推送转场,因为它将拥有所有先前 View Controller 的堆栈。有什么方法可以停止导航 Controller 链并启动新的导航 Controller 链吗?

作为一种良好的编程实践,如果使用模态视图,则父 View 应该关闭 subview 。但在这种情况下,我不想回去,而是想从此模态视图启动新的导航 Controller 链。但最后还是想直接回到home Controller 。

最佳答案

使用popToRootViewControllerAnimatedpopToViewController:animated

popToRootViewControllerAnimated:弹出堆栈上除 Root View Controller 之外的所有 View Controller 并更新显示。

popToViewController:animated: 弹出 View Controller ,直到指定的 View Controller 位于导航堆栈的顶部。

popToViewController 示例

if([[self.navigationController  viewControllers] containsObject:HomecontrollerObj])
{
    [self.navigationController popToViewController:HomecontrollerObj animated:animation];

}

回家,也用

[HomecontrollerObj.navigationController popViewControllerAnimated:NO];
[TableViewcontrollerObj.navigationController popViewControllerAnimated:NO];
[PageViewControllerObj.navigationController popViewControllerAnimated:NO];

关于ios - 如何打破导航 Controller 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15448860/

相关文章:

ios - 如何在设置启用 False 时更改 TabBarItem 的颜色

ios - 仅用于滑动的 UIPageControl

iOS8 - 呈现模态视图会删除 subview

ios - 如何根据情况选择rootViewController来启动App?

iOS - 设置 - Modal Segue to Table view controller

ios - 使用 NSCoding 使用更多数组数据更新 iOS 存储的数据

objective-c - iOS 圆形 float

objective-c - 了解自定义委托(delegate)

ios - 呈现模态视图 Controller 时,核心动画层表现得很奇怪。 CATransform3D 问题

swift - Swift 中没有带有标识符错误的 Segue?