我想在 xcode Storyboard中链接 View Controller 以实现以下效果:
A -> B -> C -> D -> E -> B -> C -> D -> E -> B -> ...
其中上面的字母代表单独的 View Controller (全尺寸场景)。当我在 View 之间移动时,我希望有一个从右到左的水平滑动segue,并且我不希望或不需要保留先前 View 的状态(即没有推送或模态segue)。不过,我确实需要在 View 之间传输一些状态。
关于如何使用 Storyboard编辑器、代码或两者的某种组合来最好地实现这一目标,有什么建议吗?
最佳答案
我突然想到了几个选择:
与旧版本 iOS 具有最大向后兼容性的最简单解决方案是使用导航 Controller ,保留对 View Controller
B
的引用。某个地方,然后你就可以,在E
,有一些IBAction
这样做:[self.navigationController popToViewController:B animated:YES];
在此模型中,除了
E
中的一个之外,所有的 Segue 都将在 Storyboard 中呈现。至B
,您可以在IBAction
中使用上述代码(或其他)。如果您可以放弃 iOS 5 兼容性,您也可以使用
unwind
继续。在这种情况下,所有的转场都将在 Storyboard中呈现。但我们中的许多人还不愿意放弃 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
中执行了此展开操作, ,你会突然有一个新的 segue 类型,名为backToB
(不过,我建议你给它一个更好的名字)在IB中呈现给你,你可以使用它从E
开始至B
。显然,所有其他推送转场都会像往常一样出现在故事板中。如果您确实不想使用导航 Controller ,但不需要 iOS 4 兼容性,您也可以通过 View Controller 包含来实现此目的,其中您有一个父自定义容器 Controller
ParentVC
,和A
通过E
将是子 Controller 。然后,您可以使用自定义 Segues 在子 Controller 序列中进行转换。最终的一个变体可能如下:
在这种情况下,与选项 1 一样,您只是使用导航 Controller ,当
B
时首次加载时,它将以编程方式立即在viewDidLoad
中执行以下操作[self presentViewController:A animated:NO];
虽然
B
是 Root View Controller ,感觉就像A
曾是。当A
完成后它会返回B
,此时您可以执行您的标准B
-C
-D
-E
插入segue进度,但因为我们做了B
根 Controller ,E
可以做popToRootViewControllerAnimated
返回B
,并且您无需担心保留指向B
的指针大约。如果A
,这个模型就很有意义。是登录 Controller 或启动屏幕,或者有些不正常流程的东西。
其中,1 可能是最简单的,2 可能被认为是最优雅的(尽管您失去了 iOS 5 和更早的支持),如果您不介意编写更多(有些复杂)代码和内存,则 3 是一个选项使用至关重要,4 与 1 一样非常简单,但这只是流程对您的应用程序是否有意义的问题。就我个人而言,我倾向于选项 1 或 4,具体取决于 View Controller A
曾是。如果需要兼容 iOS 4,这两个选项也适用于 NIB。
关于ios - 我应该如何在 xcode Storyboard中链接 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14465861/