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

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

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で遷移すればよい。