Unwind segue 不起作用 SWIFT

Posted

技术标签:

【中文标题】Unwind segue 不起作用 SWIFT【英文标题】:Unwind segue doesn't work SWIFT 【发布时间】:2015-01-03 11:05:28 【问题描述】:

我有一个导航控制器,带有一个表格视图。当我按下一个单元格时,详细视图控制器会打开。

在我的根视图控制器中,我有:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 

    if segue.identifier == "detailview"     
        var destination:DetailViewController = segue.destinationViewController as DetailViewController
        destination.delegate=self   
    

在我的详细视图控制器中,我有一个后退按钮:

@IBAction func back()         
    self.navigationController?.popViewControllerAnimated(true)    

问题是,在 2 go to 和 return 之后,当我返回根视图控制器按返回按钮时,我的应用程序崩溃。控制台不会给我错误。它只是崩溃。

我想我忘记了解开这个序列。 所以在我的详细视图控制器中,我添加了:

@IBAction func unwindToViewController(segue: UIStoryboardSegue) 
    println("unwind function")

我在情节提要中使用“退出”将此功能连接到后退按钮。

当我运行我的应用程序时,如果我按下后退按钮,控制台不会显示我的打印“展开功能”,因此不会调用 unwindToViewController。为什么?

我的应用仍然崩溃...

【问题讨论】:

【参考方案1】:

您的unwindToViewController 方法应该放在根viewController 中,然后从detailViewController 中的按钮按住ctrl 并拖动到InterfaceBuilder 中的Exit 图标。在弹出菜单中选择该方法。

另一种方法是在从 detailViewController 调用的 rootViewController 中声明一个带有函数的协议。您已经将 rootViewController 设置为 detailViewController 的委托。在该函数中,您调用 dismissViewController

【讨论】:

好的,现在可以了,虽然我的应用程序仍然崩溃,但我一定有另一个问题。【参考方案2】:

快速回答...

我遇到了类似的问题。 func: "segueForUnwindingToViewController(toViewController: UIViewController, fromViewController: UIViewController, identifier: String?) -> UIStoryboardSegue" 从未被调用过。

解决方案

由于我没有“UINavigationController”,因为我只是将应用程序嵌入到导航控制器中,因此我为导航控制器创建了一个 UINavigationController 子类,并在其上添加了上面命名的函数。现在应用调用“segueForUnwindingToViewController”

【讨论】:

以上是关于Unwind segue 不起作用 SWIFT的主要内容,如果未能解决你的问题,请参考以下文章

从 Unwind segue 触发时,Push segue 不起作用

在容器视图中导航时,Unwind Segue 不起作用

Unwind Segue 在 iOS 8 中不起作用

使用标识符执行 segue 在 swift 2 中不起作用

推送segue动画不起作用

Swift 以编程方式创建一个 unwind segue