【发布时间】:2015-07-18 18:13:44
【问题描述】:
我在我的应用中使用带有动画过渡的自定义转场。我对三个 UIViewController 之间的导航有疑问。假设我们在 Storyboard 中有这样的结构。
.
换句话说,我们是这样使用它的:
- 单击 Main[To Scene 1] 调用 Custom Segue 并转到 Scene 1
- 单击 Scene1[To Main] 调用 Unwind Segue 并转到 Main
- 点击Main[To Scene 2]调用另一个自定义Segue并转到Scene 2
- 单击Scene2[To Scene 1]调用另一个自定义Segue并转到Scene 1
问题来了
- 我们点击 Scene1[To Main] 并调用 Unwind Segue 并转到 Scene 2 而不是 Main (这对这个架构来说没问题,但这不是我想要的行为)
那么问题是如何实现这样的行为?
将一个额外的 Segue 从 Scene1[To Main] 放到 Main 并检查它来自哪个 ViewController 然后调用这个 Segue(对于 VC Scene2 em>) 或 Unwind (对于 VC Main)?
或者有更优雅的方式来做到这一点?
【问题讨论】:
-
你能解释一下到底是什么问题吗?当我在 xcode 中重建你的层次结构时,一切都按预期工作!
-
hm...我无法理解它是怎么回事...我在 Scene1[To Main] 动作(展开):dismissViewControllerAnimated(true,completion:nil)。它返回到之前的视图(如果我们来自 Main,则返回 Main,如果来自 Scene2,则返回到 Scene2)。即使从 Scene2 到 Scene1,我们应该怎么做才能从 Scene1 到 Main?
-
1.问题:而不是呈现视图控制器,您应该将主视图控制器包装在导航控制器中并推送场景1、场景2 等等... 2. 问题:通过调用dismissviewcontroller ...您并没有真正使用展开vc 的技术。为此,您必须在主 vc 中实现以下方法签名: - (IBAction)unwind:(UIStoryboardSegue *)segue。然后您可以从场景 1 和场景 2 中的按钮 ctrl 拖动到界面生成器中的红色退出按钮并选择刚刚创建的方法。你明白我的意思吗? :)
-
Main 中 unwind 方法的 Swift 签名是
@IBAction func unwind(segue: UIStoryboardSegue) {。 -
1.这是您唯一拥有的此类功能吗?只有 Main VC 中的一个,因为它就是你所需要的。 2.你不需要调用
dismissViewControllerAnimated,当你将函数连接到视图控制器顶部的退出图标时,故事板会为你关闭VC。
标签: ios xcode swift uiviewcontroller segue