【问题标题】:Swift - Custom Segues between three UIViewControllersSwift - 三个 UIViewController 之间的自定义 Segue
【发布时间】:2015-07-18 18:13:44
【问题描述】:

我在我的应用中使用带有动画过渡的自定义转场。我对三个 UIViewController 之间的导航有疑问。假设我们在 Storyboard 中有这样的结构。

.

换句话说,我们是这样使用它的:

  1. 单击 Main[To Scene 1] 调用 Custom Segue 并转到 Scene 1
  2. 单击 Scene1[To Main] 调用 Unwind Segue 并转到 Main
  3. 点击Main[To Scene 2]调用另一个自定义Segue并转到Scene 2
  4. 单击Scene2[To Scene 1]调用另一个自定义Segue并转到Scene 1

问题来了

  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


【解决方案1】:

1.为什么不将初始视图控制器嵌入到导航控制器中...省去转场...您只需按下后退按钮...

转到您的故事板...单击您的主视图控制器,选择编辑器,转到“嵌入”并选择导航控制器。

  1. 如果您没有导航栏...并且如果 unwind segue 给您带来一些问题,只需从您的场景 1 创建另一个 segue,回到您的主场景,然后在您的 Scene One 上调用该 segue“到主”按钮。

并确保你的两个展开序列没有完全相同的名称..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    相关资源
    最近更新 更多