我应该如何在Xcode storyboard中链接视图控制器?

我想在xcode storyboard中链接视图控制器来达到以下效果:

A→B→C→D→E→B→C→D→E→B→…

上面的字母表示单独的视图控制器(全尺寸的场景)。 当我在视图之间移动时,我想要从左到右横向滑动,我不希望或不需要保留之前视图的状态(即不推动或模态轮播)。 我确实需要在视图之间转移一些状态。

有关如何使用故事板编辑器,代码或二者的某种组合来实现最佳效果的build议?

有几个select跳到我身上:

  1. 与旧版iOS最大的向后兼容性的最简单的解决scheme是使用导航控制器,在某处保留对视图控制器B的引用,然后在E可以执行一些IBAction

     [self.navigationController popToViewController:B animated:YES]; 

    在这个模型中,除了EB之外,所有的细节都将在故事板中performance出来,你可以在IBAction (或者其他)中使用上面的代码。

  2. 如果你可以抛弃iOS 5的兼容性,你也可以使用unwind segue。 在这种情况下,所有的细节都将在故事板中performance出来。 但是我们很多人都不愿意放弃iOS 5的兼容性,所以也许你不想考虑这个解决scheme。 但是,如果您确实想要使用unwind segue,则只需在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有了这个放松的动作,你会突然有一个新的名为backToB seguetypes(不过,我build议你给它一个比这更好的名字)在IB提供给你,你可以用它来从EB 显然,所有其他的推式游戏将像平常一样在你的故事板中呈现。

  3. 如果你真的不想使用导航控制器,但不需要iOS 4的兼容性,你也可以通过视图控制器控制实现这一点,在这里你有一个父定制容器控制器ParentVC ,而AE将是子ParentVC控制器。 然后,您可以通过自定义inheritance来转换子控制器序列。

  4. 最后一个变化可能是以下几点:

    BABCDE

    在这种情况下,就像选项1,你刚刚使用导航控制器,当第一次加载时,它会以编程方式立即在viewDidLoad

     [self presentViewController:A animated:NO]; 

    虽然B是根视图控制器,但它感觉像A一样。 当A完成时,它将退回到B ,此时你可以用你的标准BCDE推继续进行,但是因为我们把B作为根控制器,所以E可以做popToRootViewControllerAnimated返回到B ,而且你不需要担心保持一个指向B的指针。 如果A是一个login控制器或启animation面,或者有点超出正常stream程,这个模型就很有意义。

其中,1可能是最简单的,2可能被认为是最优雅的(虽然你失去了iOS 5和更早的支持),3是一个选项,如果你不介意多写一些(有些复杂)的代码和内存使用是关键,和4一样,比如1,这很容易,但这只是stream程对于你的应用程序是否合理的一个问题。 就个人而言,我倾向于select1或4,这取决于视图控制器A 如果需要iOS 4的兼容性,那么这两个选项也适用于NIB。