ThatHybrid
ThatHybrid

Reputation: 383

How to switch view controllers in swift?

I'm trying to switch from one UIViewController to another using code. Right now I have,

self.presentViewController(ResultViewController(), animated: true, completion: nil)

All this is doing is taking me to a black screen instead of the ResultViewController. Any suggestions?

Upvotes: 18

Views: 76365

Answers (8)

Hussein
Hussein

Reputation: 123

vc = YourViewController()

UIApplication.shared.keyWindow?.rootViewController = vc

Or

vc = YourViewController()

UIApplication.shared.keyWindow?.rootViewController = UINavigationController(rootViewController: vc) //If you want to add navigation functionality to that VC

Upvotes: 1

J. Pataraccs
J. Pataraccs

Reputation: 11

Shaba's answer is a good start but requires the following so that you can control the segue from within your view controller:

override func shouldPerformSegue(withIdentifier identifier: String, 
              sender: Any?) -> Bool {    
 // your code here    
 // return true to execute the segue    
 // return false to cause the segue to gracefully fail  } 

Source

Upvotes: 0

Cyril
Cyril

Reputation: 2818

Swift 3

To present a controller modally

let vc = self.storyboard!.instantiateWithIdentifier("SecondViewController")
self.present(vc, animate: true, completion: nil)

To show a controller

self.show(vc, sender: self)

Upvotes: 4

Vivek Sehrawat
Vivek Sehrawat

Reputation: 6570

With Storyboard. Create a swift file (SecondViewController.swift) for the second view controller and in the appropriate function type this:

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "secondViewController") as! secondViewController

self.navigationController.pushViewController(secondViewController, animated: true)

Without storyboard

let secondViewController = ViewController(nibNameOrNil: NibName, bundleOrNil: nil)
self.presentViewController(secondViewController, animated: true, completion: nil)

Upvotes: 24

Shaba Aafreen
Shaba Aafreen

Reputation: 1535

The easiest way to switch between screens in iOS is. Add a button on the current screen. Then press control and drag the button to the target screen. Then select push. And when you will tap the button the screen will be switched to the target screen. Make sure you are using a UINavigationViewController.

Source: ios UINavigationController Tutorial.

Upvotes: 0

William DeGroot
William DeGroot

Reputation: 71

The easiest way to do this would be to create a segue by right clicking on the view you are starting on and dragging the blue line to the result view controller the hit the show segue option. Then set the identifier of the segue to "segue". Now add this code wherever you would like in your view controller:

self.performSegueWithIdentifier("segue", sender: nil)

this will trigger the segue that will go to your resultViewController

Upvotes: 2

Nurdin
Nurdin

Reputation: 23883

You can try this one

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

let resultViewController = storyBoard.instantiateViewControllerWithIdentifier("ResultView") as ResultViewController

self.presentViewController(resultViewController, animated:true, completion:nil)

Make sure you set your view controller identifier.

enter image description here

Upvotes: 8

Rashad
Rashad

Reputation: 11197

Try this:

let vc = ViewController(nibNameOrNil: yourNibName, bundleOrNil: nil)
self.presentViewController(vc, animated: true, completion: nil)

Hope this helps.. :)

Upvotes: 2

Related Questions