【问题标题】:Segue prepared but performance fails without exceptionSegue 准备好,但性能无一例外地失败
【发布时间】:2016-02-19 10:55:56
【问题描述】:

我有两个视图,A 和 B,它们之间有模态序列。 A 的控制器定义了@IBAction func unwindSegue(segue: UIStoryboardSegue)

我正在尝试以编程方式执行展开转场(从视图 B 回到 A),但它失败而不会产生任何错误。在视图 B 的控制器中,我调用了performSegueWithIdentifier("unwind", sender: self),可以看到调用了func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?),但之后没有任何反应。

我已经为 XCode 中的展开转场指定了自定义名称,并且视图 B 和 C 之间的设置相同(使用不同的名称以避免冲突)可以正常工作。

编辑: 展开由按钮或代码触发,并且按钮流程工作正常。我很困惑,因为运行时可以识别 segue,否则它会引发异常 - 那么是什么阻止它运行呢?我已经完成了 prepare 方法,并且没有任何阻塞。

编辑 2: 我注意到从按钮和通过代码触发视图 A 和 B 之间的 unwindSegue 之间的区别是目标 VC。通过按钮时,目的地是视图 A,但通过代码是 C。为什么会发生这种情况?代码流是通过视图 C 触发的,其中有一个返回视图 A 的按钮,并且只是一系列从堆栈中弹出视图的展开序列。

我可以通过按钮一次从每个视图向后展开,但是如果我点击按钮从视图 C 或 D 返回到视图 A,我会展开到视图 B 然后遇到目的地不正确的问题等等无法完成遍历查看A。

【问题讨论】:

  • 您是否已将 segue 连接到退出视图控制器 B 并从弹出窗口中选择控制器 A 的展开方法?
  • 如果使用导航控制器,请尝试self.navigationController.performSegueWithIdentifier。一个想法。
  • 我使用的是普通的 VC。
  • 我认为您遇到了架构/设计问题

标签: ios swift segue uistoryboardsegue unwind-segue


【解决方案1】:

在这里找到答案https://spin.atomicobject.com/2015/04/23/unwind-segue-set-destination/How to unwind through multiple views without displaying intermediate views

我必须向 vc B 添加以下内容,因为从视图 B 到 A 的展开选择了错误的“最近展开”。

override func canPerformUnwindSegueAction(action: Selector, fromViewController: UIViewController, withSender sender: AnyObject) -> Bool {
    return fromViewController is ViewC
}

现在,如果发送者是视图 C,segue 只会展开以视图 B 作为目的地。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多