Xcode 6 Beta 4 中的 Unwind Segue

8
我一直在尝试给Xcode 6中的Swift应用程序添加一个取消 segue,在前三个测试版的发布说明中,它被声明为不受支持。然而,在Beta4中,该错误注释已经不存在了。我听说有人能够使其工作,但我没有这样的运气。那么,我的问题是:我应该如何尝试查看取消segue是否适用于我的应用程序?我需要尝试什么?我正在使用UIBarButtonItem触发segue。到目前为止,我已经将以下代码放入目标控制器的.Swift文件中:
@IBAction func unwindToSegue(segue:UIStoryboardSegue) {}

使用这段代码,我能够通过从工具栏按钮拖动到退出图标,并点击unwindToSegue方法将工具栏按钮连接到函数。这部分操作已经成功,但是代码不运行,即使我在函数内设置了断点也没有被调用。
4个回答

21

你需要将unwindToSegue函数放在源视图控制器中(也就是你试图返回的视图控制器)。

另一个方法是程序化地调用转场。首先,从视图控制器图标到退出图标 (即接口生成器中所有三个图标都在视图控制器顶部) 连接一个退出转场。给该转场命名,例如“goBackHome”。然后将你的按钮连接到此@IBAction

@IBAction func headHome() {
    println("Button seen.  Trigging exit segue manually...")
    self.performSegueWithIdentifier("goBackHome", sender: self)
}

是的,我正在尝试返回到控制器中。 - trumpeter201
我创建了一个新项目,并使用您的函数使其正常工作。我验证了一下,如果您将它放在控制器中返回,它会让您连接上,但是它什么也不做。这就是为什么我认为您可能已经这样做了。 - vacawama
我发现了问题,视图控制器的.swift文件没有正确连接到视图控制器。 这是潜在的问题,所以我认为它是正确的。谢谢。 - trumpeter201
重要的是将上面的取消方法放在正确的控制器中。如果它不在执行推送转场的控制器中,那么它将不会被调用。 - Max MacLeod

1
我的问题是从自定义容器视图控制器(VC)转换到标准视图控制器时,尝试返回会丢失原始导航栏。研究论坛后发现,解开segue会将新的VC "protocols"弹出堆栈,并允许我返回到原始VC "protocols"不变。
我向新的VC拖入一个按钮,首先将其拖到swift文件中创建操作"back2main",按下面所示进行修改,然后将按钮拖到新VC自身顶部的退出图标处,生成"解开segue"。
@IBAction func back2main(segue: UIStoryboardSegue) {
    dismissViewControllerAnimated(true, completion: nil)
}

0

我曾经也遇到过同样的问题。当我选择退出按钮并连接所有内容时,退回函数就会显示出来,但是当我点击按钮时,没有任何反应。

经过一些摸索,我意识到问题源于我选择的Segue从一个视图控制器转移到另一个视图控制器。

问题实际上是,我想要返回的视图包含了多个不同的导航组件,在显示“子”视图时被移除了。我通过将其从展示(或展示详细信息)更改为弹出式窗口来解决了这个问题。

进入Segue,选择属性检查器,然后您可以更改Segue。


0

使用XCode 6 Beta 4可以解决此问题。从类定义中删除@objc(classname),并删除(workaround).h文件。

我昨天也遇到了类似的问题,我的ViewController中的一个按钮无法触发unwind segue。

尝试以下操作: 在您的视图控制器上放置一个新的UIButton,并将其保留为原样。不要更改任何内容,只是确保没有副作用。然后将此按钮连接到您的unwind segue,看看是否有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接