Rob Norback
Rob Norback

Reputation: 6609

How to Programmatically Segue to a New ViewController in a New Storyboard

I simply want to know how to segue to a new view controller in a new storyboard without having to create the new view controller programmatically.

The Scenario: I have one view controller that's created entirely in code and the system thinks I'm in Storyboard A. I want to segue from this view controller to another view controller that's contained on Storyboard B.

  1. I could create a segue attached to a storyboard reference (which is a great suggestion) if this view controller was created with Storyboard. But it's in code, so I can't do this.
  2. My other option is to make the next view controller be totally created in code so that I can present it without using segues. That's a pain, but will work.
  3. My third option is to initialize the new storyboard in code, initialize the new view controller in code using a storyboard identifier, and then use the navigation controller to segue to it.

If there are other options I'm not aware of please include them below!

Upvotes: 3

Views: 3833

Answers (3)

tebs1200
tebs1200

Reputation: 1195

I would urge anyone reading this to take a look at the Storyboard Reference introduced in Xcode 7 to achieve this instead of loading the storyboard programatically.

Upvotes: 1

Zumry Mohamed
Zumry Mohamed

Reputation: 9558

You can override the below function to override the segue call.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

   var destinationController = segue.destinationViewController

}

Upvotes: 0

Rob Norback
Rob Norback

Reputation: 6609

This piece of code allows you to segue to any viewController anywhere in your application while still being able to build your viewController with storyboard.

func settingsButtonPressed(sender:UIButton) {
    let storyboard = UIStoryboard(name: "AccountLinking", bundle: nil)
    let linkingVC = storyboard.instantiateViewControllerWithIdentifier("AccountLinkingTable")
    self.navigationController?.pushViewController(linkingVC, animated: true)
}

So many hours saved thanks to this little function.

Upvotes: 7

Related Questions