【问题标题】:How to break chain of navigation controllers如何打破导航控制器链
【发布时间】:2013-03-16 11:45:42
【问题描述】:

在我的项目中,我有以下导航控制器链

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,因为它会包含所有以前的视图控制器。有什么方法可以停止导航控制器链并启动新的控制器?

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

【问题讨论】:

    标签: ios modalviewcontroller segue pushviewcontroller uistoryboardsegue


    【解决方案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];
    

    【讨论】:

      【解决方案2】:

      我最终使用了故事板展开功能。

      在 home 控制器中实现一个方法,然后从任何源控制器将 segue 连接到该方法就可以了。

      Tutorial on Unwinding Storyboard Segues

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-11
        • 2020-06-09
        • 1970-01-01
        • 2020-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-02
        相关资源
        最近更新 更多