我应该如何在Xcode storyboard中链接视图控制器?
我想在xcode storyboard中链接视图控制器来达到以下效果:
A→B→C→D→E→B→C→D→E→B→…
上面的字母表示单独的视图控制器(全尺寸的场景)。 当我在视图之间移动时,我想要从左到右横向滑动,我不希望或不需要保留之前视图的状态(即不推动或模态轮播)。 我确实需要在视图之间转移一些状态。
有关如何使用故事板编辑器,代码或二者的某种组合来实现最佳效果的build议?
有几个select跳到我身上:
-
与旧版iOS最大的向后兼容性的最简单的解决scheme是使用导航控制器,在某处保留对视图控制器
B
的引用,然后在E
可以执行一些IBAction
:[self.navigationController popToViewController:B animated:YES];
在这个模型中,除了
E
到B
之外,所有的细节都将在故事板中performance出来,你可以在IBAction
(或者其他)中使用上面的代码。 -
如果你可以抛弃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提供给你,你可以用它来从E
到B
显然,所有其他的推式游戏将像平常一样在你的故事板中呈现。 -
如果你真的不想使用导航控制器,但不需要iOS 4的兼容性,你也可以通过视图控制器控制实现这一点,在这里你有一个父定制容器控制器
ParentVC
,而A
到E
将是子ParentVC
控制器。 然后,您可以通过自定义inheritance来转换子控制器序列。 -
最后一个变化可能是以下几点:
在这种情况下,就像选项1,你刚刚使用导航控制器,当第一次加载时,它会以编程方式立即在
viewDidLoad
[self presentViewController:A animated:NO];
虽然
B
是根视图控制器,但它感觉像A
一样。 当A
完成时,它将退回到B
,此时你可以用你的标准B
–C
–D
–E
推继续进行,但是因为我们把B
作为根控制器,所以E
可以做popToRootViewControllerAnimated
返回到B
,而且你不需要担心保持一个指向B
的指针。 如果A
是一个login控制器或启animation面,或者有点超出正常stream程,这个模型就很有意义。
其中,1可能是最简单的,2可能被认为是最优雅的(虽然你失去了iOS 5和更早的支持),3是一个选项,如果你不介意多写一些(有些复杂)的代码和内存使用是关键,和4一样,比如1,这很容易,但这只是stream程对于你的应用程序是否合理的一个问题。 就个人而言,我倾向于select1或4,这取决于视图控制器A
如果需要iOS 4的兼容性,那么这两个选项也适用于NIB。