0

在项目中,我遵守了所有的网页都看如何打破导航控制器链

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

现在在页面视图控制器后至少一次的导航控制器链 - 我要自动转到完全不同这是测验视图。

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

有3个不同的测验。在完成所有三次测验之后,我想回到家中。同样在每个结果控制器中,我想提供一个返回主页的选项。当到达主视图时,它应该是全新的重启。

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

我想反对push segue,因为它会有所有先前的视图控制器的堆栈。有什么办法可以阻止导航控制器链并启动新的导航?

作为一种很好的编程习惯,如果使用模态视图,父视图应该消除子视图。但在这种情况下,我不想回去,而是想从这个模式视图开始新的导航控制器链。但最后还是想直接回家控制器。

回答

1

使用popToRootViewControllerAnimatedpopToViewController:animated

popToRootViewControllerAnimated:弹出堆栈除了根视图控制器上的所有视图控制器和更新显示。

popToViewController:animated:弹出视图控制器,直到指定的视图控制器位于导航堆栈的顶部。

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];