Search code examples
xcodemacoscocoaswift4segue

Load SecondViewController automatically using Segue


How to load SecondViewController simultaneously with ViewController inside viewDidLoad() method?

Segue's type is Sheet.

import Cocoa

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.performSegue(withIdentifier: "secondVC", sender: self)
    }

    func prepareforSegue(segue: NSStoryboardSegue, sender: Any?) {
        if let identifier = segue.identifier, identifier == "secondVC" {
            _ = segue.destinationController as? SecondViewController
        }
    }
}

enter image description here


Solution

  • This

    self.performSegue(withIdentifier: "secondVC", sender: self)
    

    won't work inside viewDidLoad consider wraping it inside a Dispatch-after or inside a bool flag in viewDidAppear

    DispatchQueue.main.asyncAfter(deadline:.now() + 2 ) {
       self.performSegue(withIdentifier: "secondVC", sender: self)
    }
    

    OR

    var once = true
    override func viewDidAppear() {
       super.viewDidAppear()
       if once {
            self.performSegue(withIdentifier: "secondVC", sender: self)
            once = false
       }
    }