放松segue不适用于SWIFT

时间:2015-01-03 11:05:29

标签: ios swift uinavigationcontroller segue

我有一个带有桌面视图的导航控制器。按下单元格时,详细视图控制器将打开。

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

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

我想我已经忘记了解开这个问题了。 所以在我的详细视图控制器中我添加了:

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

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

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

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

2 个答案:

答案 0 :(得分:3)

您的unwindToViewController方法应放在根视图控制器中,然后从detailViewController中的按钮按住Ctrl键拖动到InterfaceBuilder中的Exit图标。在弹出菜单中选择该方法。

另一种方法是使用从detailViewController调用的rootViewController中的函数声明一个协议。您已将rootViewController设置为detailViewController的委托。在该功能中,您可以拨打dismissViewController

答案 1 :(得分:0)

迅速回答......

我有类似的问题。 功能:" segueForUnwindingToViewController(toViewController: UIViewController, fromViewController: UIViewController, identifier: String?) -> UIStoryboardSegue"从未被称为。

解决方案

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