Perform push segue after an unwind segue

ios, swift, unwind-segue, xcode

Solution

A bit late to the party but I found a way to do this without using state flags

Note: this only works with iOS 9+, as only custom segues support class names prior to iOS9 and you cannot declare an exit segue as a custom segue in storyboards

1. Subclass UIStoryboardSegue with UIStoryboardSegueWithCompletion

class UIStoryboardSegueWithCompletion: UIStoryboardSegue {
    var completion: (() -> Void)?

    override func perform() {
        super.perform()
        if let completion = completion {
            completion()
        }
    }
}

2. Set UIStoryBoardSegueWithCompletion as the class for your exit segue

note: the action for this segue should be `unwindToMainMenu` to match the original question

3. Update your unwind @IBAction to execute the code in the completion handler

@IBAction func unwindToMainMenu(segue: UIStoryboardSegue) {
    if let segue = segue as? UIStoryboardSegueWithCompletion {
        segue.completion = { 
            self.performSegueWithIdentifier("Categories", sender: self) 
        }
    }
}

Your code will now execute after the exit segue completes its transition

Problem

I am working on a camera app where the camera views are shown modally. After I am done with cropping. I perform an unwind segue to the `MainPageViewController`. (Please see the screenshot) My unwind function inside `MainPageViewController` is as follows; ``` @IBAction func unwindToMainMenu(segue: UIStoryboardSegue) { self.performSegueWithIdentifier("Categories", sender: self) } ``` where "categories" is the push segue identifier from `MainPageViewController` to `CategoriesTableViewController`. The program enters the `unwindToMainMenu` function but it does not perform the push segue. Any idea how to fix this? Note: I found the same question but the answer suggests to change the storyboard structure.

Original source

Related problems