10
votes

I have been reading that unwind segue's are bugged in Xcode 6. I am using Xcode 6.1.1 and I use swift.

I use the "Back" button that is put by the navigation controller. Thus I can't cntrl drag to the exit icon. Moreover I can't drag from viewController icon to exit icon either.

Is this a bug? Or else I am missing some fundamental knowledge about how to use unwind segue. How can I set unwind segues from the storyboard?

4

4 Answers

9
votes

I want to provide a detailed answer:

To perform an unwind segue, go to the view controller that you want to segue to and add the following function; (the name can change of course)

@IBAction func unwindToMainMenu(segue: UIStoryboardSegue) {

}

Once you add this function, you will be able to see this unwind function from any view controller on your storyboard. Just right click on the exit icon on the top of any view controller.exit icon right click

If you want to perform unwind with a button, then you can cntrl + drag from the button to exit icon and choose your unwindSegue function. Done!

Unwind with Button

If you want to perform unwind programmatically, then cntrl + drag from the viewController icon to the exit icon and choose the unwind function.

enter image description here

Afterwards, open the Document Outline and click on the unwind segue.

enter image description here

Go to Attributes Inspector inside Utilities and give an identifier to your unwind segue.

enter image description here

Lastly, call the performSegueWithIdentifier function like the following;

self.performSegueWithIdentifier("goToMainMenu", sender: self)

Hope that helps!

3
votes

Got it working. If you are presenting from a NavigationController or TabBarController(unsure about the TabBarController), you need to subclass the navigation controller and add the unwind segue to that. In storyboard don't forget to change the class of your navigation controller. My view hierarchy was NavController -> TableController -> DetailController. After adding method to custom NavBar class add it to the VC you want to RETURN to. You will then be able to ctrl-drag to exit. I consider this a bug, as once it is hooked up I was able to delete the subclass and return to stock NavigationController and it still worked.

1
votes

Got it working on Xcode 6.2. My case is ViewController A presenting B modally. Unwind setup steps below:

  1. In A, write an IBAction

    -(IBAction)unwindFromB:(UIStoryboardSegue *) unwindSegue 
    {
      ViewControllerB *vc = [unwindSegue sourceViewController];
      // get whatever data you want to pass back from B
    }
    
  2. In storyboard, find B and right-click the 'Exit' button at the top, then the 'Presenting Segue' menu will list unwindFromB you've just created in A

  3. Click the little '+' sign to the right and link it back to B, select 'manual'

  4. Don't forget to set identifier of the unwind segue if you need to call it programmatically.

0
votes

I found that I could not drag from the UITableViewCell to the Exit object on the View Controller on the Storyboard.

Solution was to first add an appropriate IBAction in code. Once an IBAction exists, the drag target will light up.

-(IBAction)prepareForUnwind:(UIStoryboardSegue *)segue {

}