Ios 如何在xcode情节提要中链接ViewController?

Ios 如何在xcode情节提要中链接ViewController?,ios,uiviewcontroller,xcode4.5,uistoryboard,uistoryboardsegue,Ios,Uiviewcontroller,Xcode4.5,Uistoryboard,Uistoryboardsegue,我希望在xcode情节提要中链接视图控制器,以实现以下效果: A->B->C->D->E->B->C->D->E->B-> 其中,上述字母表示单独的视图控制器(全尺寸场景)。当我在视图之间切换时,我希望有一个从右到左的水平滑动序列,并且我不希望或不需要保留以前视图的状态(即无推送或模式序列)。不过,我确实需要在视图之间转移一些状态 关于如何最好地使用故事板编辑器、代码或两者的组合来实现这一点,有什么建议吗?我有几个选择: 与旧版本iOS具有最大向后兼容性的最简单解决方案是使用导航控制器,在某处保

我希望在xcode情节提要中链接视图控制器,以实现以下效果:

A->B->C->D->E->B->C->D->E->B->

其中,上述字母表示单独的视图控制器(全尺寸场景)。当我在视图之间切换时,我希望有一个从右到左的水平滑动序列,并且我不希望或不需要保留以前视图的状态(即无推送或模式序列)。不过,我确实需要在视图之间转移一些状态


关于如何最好地使用故事板编辑器、代码或两者的组合来实现这一点,有什么建议吗?

我有几个选择:

  • 与旧版本iOS具有最大向后兼容性的最简单解决方案是使用导航控制器,在某处保留对view controller
    B
    的引用,然后您可以在
    E
    上使用一些执行以下操作的
    iAction

    [self.navigationController popToViewController:B animated:YES];
    
    在这个模型中,除了从
    E
    B
    的序列外,所有的序列都将在故事板中表示,对于这一序列,您将在
    i动作
    (或其他)中使用上述代码

  • 如果您可以放弃iOS 5兼容性,还可以使用
    unwind
    segue。在这个场景中,所有的片段都将出现在故事板中。但是我们中的许多人还不愿意放弃iOS 5的兼容性,所以也许你不想考虑这个解决方案。但是,如果您确实想使用展开序列,您只需在
    B
    中定义一个展开操作,例如:

    - (IBAction)backToB:(UIStoryboardSegue *)segue
    {
        // if you need to do any UI update because we got an unwind segue
        // back to this controller, do that here
    }
    
    一旦你在
    B
    中有了这个放松动作,你会突然在IB中出现一个新的segue类型,名为
    backToB
    (不过,我建议你给它一个更好的名称),你可以用它从
    E
    转到
    B
    。显然,所有其他推送序列都会像往常一样出现在故事板中

  • 如果您确实不想使用导航控制器,但不需要iOS 4兼容性,您也可以通过视图控制器包含来实现这一点,其中您有一个父自定义容器控制器,
    ParentVC
    ,并且
    a
    E
    将是子控制器。然后,您可以使用自定义分段通过子控制器序列进行转换

  • 最后一个变化可能是:

    在这个场景中,就像选项1一样,您只是在使用导航控制器,当第一次加载
    B
    时,它将以编程方式立即在
    viewdiload

    [self presentViewController:A animated:NO];
    
    虽然
    B
    是根视图控制器,但感觉就像
    A
    是。当
    A
    完成时,它将返回到
    B
    ,此时您可以执行标准
    B
    -
    C
    -
    D
    -
    E
    推序列,但因为我们制作了
    B
    根控制器,
    E
    只需执行
    popToRootViewControllerAnimated
    即可返回
    B
    ,您无需担心将指向
    B
    的指针保留在周围。如果
    a
    是一个登录控制器或启动屏幕,或者是一些不正常的流程,那么这个模型就很有意义


  • 其中,1可能是最简单的,2可能被认为是最优雅的(尽管你失去了iOS 5和更早版本的支持),3是一个选项,如果你不介意编写更多的(复杂的)代码,内存使用是至关重要的,4,像1,是相当容易的,但这只是一个流程是否对你的应用程序有意义的问题。就个人而言,我倾向于选择1或4,这取决于视图控制器
    A
    是什么。如果需要iOS4兼容性,这两个选项也可以用于NIB

    除了顶部的导航外,选项4看起来不错。使用属性或代码是否有一种简单的方法隐藏导航控制器在每个后续视图顶部引入的导航?@philipfc In code:
    [self.navigationController setNavigationBarHidden:YES动画:NO]在B的
    viewDidLoad
    中。您可能还需要转到情节提要,单击导航控制器,转到“属性检查器”(最右侧面板上的第四个选项卡),转到“模拟度量”,然后关闭“顶栏”。这并没有取代
    setNavigationBarHidden
    代码,但如果您知道场景的实际外观,那么只会使场景设计更容易。如果你在导航控制器上这样做的话,模拟的指标会在所有的场景中传播,这很好地结合在一起。我在测试时所做的唯一更改是取消选中导航控制器属性检查器中的“显示导航栏”,这似乎消除了在代码中隐藏导航栏的需要。@philipfc我不知道这个选项,但它非常有意义。谢谢