Unwind segue from navigation back button in Swift

末鹿安然 提交于 2019-11-27 13:46:47

问题


I have a settings screen, in that I have a table cell. By clicking on that I take to another screen where user can choose an option and I want it back in the previous view controller when back button is pressed.

I can put a custom bar button item, but I want to return to the parent view controller using the back button in the navigation bar rather than with a custom button on the view.

I don't seem to be able to override the navigation back button to point it down to my unwind segue action and since the back button doesn't appear on the storyboard, I cant drag the green Exit button to it

Is it possible to unwind a push segue with the back button?


回答1:


Here's my solution, based on Objective-C code from Blankarsch to this StackOverflow question: How to trap the back button event

Put this code inside the View Controller you want to trap the Back button call from:

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

Inside of the if block, handle whatever you need to pass back. You'll also need to have a reference back to calling view controller as at this point most likely both parent and self.parentViewController are nil, so you can't navigate the View Controller tree.

Also, you might be able to get away with simply checking parent for nil as I haven't found a case where pressing the back button didn't result in parent being nil. So something like this is a bit more concise:

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

But I can't guarantee that will work every time.




回答2:


Do the following in the view controller that has the back button

Swift 3

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



回答3:


I tried the same and it seems that you cannot catch the standard back button's action so the solution will be to use a custom button and bind it to a segue which leads back to the previous page.




回答4:


You could use some sort of delegation as you did or use a custom back button and an unwind segue.

Better even, you could handle passing data between your view controllers using a mediator:

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



来源:https://stackoverflow.com/questions/25358482/unwind-segue-from-navigation-back-button-in-swift

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!