Im using StoryBoard and i am not so sure how to instantiate a ViewController or how to reference one.
The thing is i have two view controllers and i have one with a button. I want to go to the other view controller when i pressed the button from the first view controller.
I have tried something like that:
let secondViewController:UIViewController = UIViewController()
self.presentViewController(secondViewController, animated: true, completion: nil)
Does anyone knows how to explain it to me? Thanks!
okay,
in interface builder control click on your button and drag the blue line that appears to the second view controller. The second view controller will highlight blue. You can release and the button is connected. In the popup menu select "modal segue". No code necessary. XCODE handles it.
Watch this video for a demo.
There are couple of ways of navigating between view controllers. Here's how you do it in code without segues if you're going that way.
Presenting a view controller modally.
Say you have 2 view controller scenes in the storyboard,
FirstViewController
andSecondViewController
. You want to transit fromFirstViewController
toSecondViewController
and there is no segue between them.The important part is the that you have to assign an identifier to the view controller you want to go. In this case its the
SecondViewController
. The way you assign an identifier is you select the view controller, open up the right panel and in it, go to the Identity Inspector (the third one from the left) and under the Identity, assign an identifier to the Storyboard ID field. I put mine asSecondVC
as you can see from the code snippet above.Push to another view controller.
If you want to push on to another view controller instead of presenting it, all you have to do is embed the
FirstViewController
in aUINavigationController
and change the code to this.In a comment of yours I saw you want to go to the next view controller based on a condition. Well all you have to do is check your condition in a
if else
statement and execute either of those above code.Using Segues.
If you're going to use segues instead of code, here's how you do it.
In the storyboard first you select the button and Ctrl drag to the other view controller. You'll be prompted to choose between different segues. Select
show
for push orshow detail
for modal transition (I've explained what these are below). And that's it! If you run it and tap the button, you'd be taken to the other view controller.But if you want more control over this, you have to do a little more work.. Instead of creating a segue directly from the button, select your view controller and select that little yellow icon on top (This is in Xcode 6. In older Xcode versions its under the view controller scene). Ctrl drag from that icon to the other view controller you want to transit to. You can see a connection appears between those two controllers. Select the segue and open up the right panel and go to the Attributes Inspector (The forth one from the left). Give a name to the field identifier. I gave
ToSecond
.Now create a normal action from the button. And you have to call a method called
performSegueWithIdentifier
passing that identifier. What it does is basically execute a segue with the identifier we give.And this would work. You can do the conditions checking here inside a
if else
and if the conditions are met, callperformSegueWithIdentifier
.One other thing you're likely to face is having multiple buttons in a view controller and segueing to different view controller when you tap each of them. A method called
prepareForSegue
fires each time a segue happens. And inside it, you can check for current segue identifier and execute it. The below code snippet will make this clearer.Another thing I'd like to mention is that
presentViewController
andpushViewController
are deprecated from iOS8. Instead you can useshowDetailViewController
for modal andshowViewController
to push.I'm not sure if these are backwards compatible. Meaning using
show
andshow detail
will work if you're developing for iOS 7 as well. If you are then just stick with the older methods.If you are binding view controller programmatically you need to follow this step if you are creating storyboard based application.
It is similar what we don in Objective-c just the syntax has changed.
According to your question what you need to do is go to Main.storyboard and need to select identity inspector. There you will be able to view identity which contains two fields 1.) Storyboard ID 2.) Restoration ID
Give them the name of view controller you have binded with class in storyboard id and select check box below restoration id. It will automatically copy storyboard ID in restoration ID.
You need to do same for all your view controllers.
you need to write the name you have entered in Storyboard ID for
self.storyboard?.instantiateViewControllerWithIdentifier("/* Storyboard ID */")
You can also visit the link: Instantiate and Present a viewController in Swift
First set seques of uistoryboardviewcontroller and try this
In the storyboard, select VC1 and then select the button and press control and while holding down the left button or touchpad drag across to your VC2. Then a menu should pop up. Select modal.
Run and Test. It should now perform a transition.
To transition back, the easiest way is to embed VC1 in a Navigation Controller. To do this, zoom out, select VC1 and go to the top of the screen and select:
Editor > Embed > Navigation View Controller.
Now test and run. You should have the option to go back.