Swift segueを使わずにstoryboard上のViewControllerにアクセスする


segueを使わずにstoryboard上のViewControllerにアクセスする。

アクセス対象のViewControllerのIdentifierを定義した上で、storyboard?.instantiateViewController()を使用してインスタンスを取得できる。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    let nextViewController = self.storyboard?.instantiateViewController(withIdentifier: "next") as! NextViewController
    present(nextViewController, animated: true, completion: nil)
}


また、上記をviewDidLoad内で書いたとき

override func viewDidLoad() {
    super.viewDidLoad()
    let nextViewController = self.storyboard?.instantiateViewController(withIdentifier: "next") as! NextViewController
    present(nextViewController, animated: true, completion: nil)
}

このようなエラーが出ることがある。

whose view is not in the window hierarchy!

viewDidLoad時のタイミングでは他のViewControllerにアクセスできないようなので、viewDidAppearで遷移すればよい。