7

I wish to auto-segue from the main viewController to a second view controller after a set period of time after an app loads.

How do I do this?

Do I need to do it programmatically?

Fiducial13
  • 1,103
  • 2
  • 9
  • 16

4 Answers4

20

If your UI is laid out in a Storyboard, you can set an NSTimer in viewDidLoad of your first ViewController and then call performSegueWIthIdentifier when the timer fires:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let timer = Timer.scheduledTimer(interval: 8.0, target: self, selector: #selector(timeToMoveOn), userInfo: nil, repeats: false)
    }

    @objc func timeToMoveOn() {
        self.performSegue(withIdentifier: "goToMainUI", sender: self)
    }

Here is how you set up the segue in the Storyboard:

  1. Control drag from the File's Owner icon of the first ViewController to the second ViewController.
  2. Choose "modal" from the pop-up.

Seting up the segue


  1. Click on the segue arrow that appears between the view controllers. In the Attributes Inspector for the segue...
  2. Give your segue an Identifier.
  3. Turn off Animates if you don't want to see the screen slide in.

enter image description here

vacawama
  • 150,663
  • 30
  • 266
  • 294
1

You can use this snippet of code:

let delay = 1 // Seconds
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay * NSEC_PER_SEC)), dispatch_get_main_queue()) {
    self.launchMainUI()
    return
}

which performs the launchMainUI method after delay seconds. Replace it with your own implementation, where you instantiate your view controller and present it, or simply invoke a segue.

Antonio
  • 71,651
  • 11
  • 148
  • 165
0

In your action you must write like this example

self.performSegueWithIdentifier("name of segue", sender: self)

after you must implemented this method

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{        
        if(segue.identifier == "name of segue")
        {
            var view : yourviewcontroller = segue.destinationViewController as yourviewcontroller
        }

}
reVerse
  • 35,075
  • 22
  • 89
  • 84
IcuScc
  • 72
  • 1
  • 10
0

Swift 4:

let timer = Timer.scheduledTimer(timeInterval: 8.0, target: self, selector: #selector(segueToSignIn), userInfo: nil, repeats: false)

@objc func segueToSignIn() {
    self.performSegue(withIdentifier: "SignInSegue", sender: self)
}
Aviran
  • 5,160
  • 7
  • 44
  • 76