从Swift中的导航后退按钮中解除segue

时间:2014-08-18 07:46:48

标签: ios iphone swift segue

我有一个设置屏幕,因为我有一个表格单元格。通过单击我进入另一个屏幕,用户可以选择一个选项,当按下后退按钮时我想要它回到上一个视图控制器。

image first view controller image second view controller

我可以放置一个自定义栏按钮项,但我想使用导航栏中的后退按钮返回到父视图控制器,而不是使用视图上的自定义按钮。

我似乎无法覆盖导航后退按钮以将其指向我的展开segue操作,并且因为后退按钮没有出现在故事​​板上,所以我无法将绿色的“退出”按钮拖到它上面

是否可以使用后退按钮展开push segue?

4 个答案:

答案 0 :(得分:4)

这是我的解决方案,基于Blankarsch的Objective-C代码到此StackOverflow问题:How to trap the back button event

将此代码放入要从以下位置捕获后退按钮调用的视图控制器中:

override func didMoveToParentViewController(parent: UIViewController?) {
    if (!(parent?.isEqual(self.parentViewController) ?? false)) {
        println("Back Button Pressed!")
    }
}

在if块的内部,处理你需要传回的任何内容。您还需要有一个返回调用视图控制器的引用,因为此时很可能parent和self.parentViewController都是nil,因此您无法导航View Controller树。

此外,您可以简单地检查父项为nil,因为我没有找到按下后退按钮不会导致父项为零的情况。所以这样的事情更简洁:

override func didMoveToParentViewController(parent: UIViewController?) {
    if (parent == nil) {
        println("Back Button Pressed!")
    }
}

但我无法保证每次都会有效。

安德鲁

答案 1 :(得分:2)

在视图控制器中执行以下操作 后退按钮

Swift 3

override func didMove(toParentViewController parent: UIViewController?) {
    if !(parent?.isEqual(self.parent) ?? false) {
        print("Parent view loaded")
    }
    super.didMove(toParentViewController: parent)
}

答案 2 :(得分:0)

我尝试了同样的事情,似乎你无法捕捉到标准后退按钮的动作,因此解决方案将是使用自定义按钮并将其绑定到segue,然后返回上一页。

答案 3 :(得分:0)

您可以像使用某种方式使用或使用自定义后退按钮和展开segue。

更好的是,您可以使用中介处理视图控制器之间的数据:

http://cocoapatterns.com/passing-data-between-view-controllers/