展开 segue 不起作用 SWIFT

Unwind segue doesn't work SWIFT

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

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

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 次转到和返回之后,当我返回根视图控制器并按下后退按钮时,我的应用程序崩溃了。控制台不会给我错误。它只是崩溃。

我想我忘了解除 segue。 所以在我的详细视图控制器中,我添加了:

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

我在故事板中使用 "exit" 将此功能连接到我的后退按钮。

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

我的应用程序仍然崩溃...

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

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

Swift 回答...

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

解决方案

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