viewDidLoad時に画面遷移しようとして10分ぐらい困ってたので同じように困ってる方のための記録です。
viewDidLoadにそもそも画面遷移はできない。
viewDidLoadに画面遷移できない理由は「viewDidLoadとはまだviewを読みこむ処理」だから。
結論としてはviewDidAppearを使うことで画面表示時の画面遷移を行うことができる。
よくいろんな記事で以下のようなライフサイクルを見たことがあると思います。
ふむふむ、なるほど。で、何故に画面遷移ができないの?って困った時にいろいろ調べていたら以下を見つけました。
iOS開発におけるUIViewControllerのライフサイクルイベントまとめ
とても腑に落ちたのでまとめると、viewライフサイクルは、
①loadView
②viewDidLoad
③viewWillAppear
④viewWillLayoutSubviews
⑤viewDidLayoutSubviews
⑥viewDidAppear
⑦viewWillDisappear
⑧viewDidDisappear
大まかには以下のような意味になるので、
①Viewを読み込むよ
②Viewを読み込んだよ
③Viewを表示するよ
④View(SubViews)をうまい事配置するよ
⑤View(SubViews)をうまい事配置したよ
⑥Viewを表示したよ
⑦View消すよ
⑧View消したよ
⑥のviewDidAppearで初めて画面遷移等の処理を行うことが可能になる。
コードにすると以下のようになります。
viewDidLoad内に画面遷移を書き込んだ場合。
override func viewDidLoad() {
super.viewDidLoad()
//ここに画面遷移処理を記述しても走らない。
}
override func viewDidAppear(_ animated: Bool) {
//ここに画面遷移処理を記述するときちんと走る。
}
自分なりにスッキリしました。viewDidLoad時にでも画面遷移の方法をご存知の方がいればコメントを下さい。