【Swift】UIViewControllerの再読み込み・リロード(reload)。ViewDidLoadに戻りたい時。

2015年7月13日


こんにちは、iPhoneアプリ開発者の中川です。

UITableViewのようにUIViewControllerをリロードしたいなぁと思う場面が出てきました。UITableViewの場合は、tableView.reloadDataとしてやればいいのですが、UIViewControllerの場合はそんな便利なメソッドはないですよね。というわけで、UIViewControllerのリロードをする方法を考えました。

まず理解すべきは「UIViewController の viewライフサイクル」というものなのですが、そんなまどろっこしいことは別に知らなくてもいいよ!って方もいると思うので結果から書きます。

このふたつのメソッドを実行することでUIViewControllerをUITableViewのようにreloadすることができます。

さてさて、このメソッドを実行するにあたって理解すべきライフサイクルですが、ライフサイクルというのはUIViewControllerの画面読み込み時のdelegateの実行順序です。その実行順序が以下。

UIViewControllerLifeCycle

ここで特にどれがどれだかわからなくなるのは以下の4つのメソッドだと思います。

loadView:
controllerが制御するviewを作成する

viewDidLoad:
UIViewControllerのviewがメモリに読み込まれた後に呼ばれる

viewWillAppear:
UIViewControllerのviewが表示される時にview controllerに通知される

viewDidAppear:
view controllerのviewがwindowに追加されたらview controllerに通知される

注目すべきは、赤文字の部分です。ViewDidLoadに戻りたいので、loadViewを呼んでViewを作成したのちに、ViewDidLoadが呼ばれなければなりません。そして、通知されるメソッドは呼ばせる必要はありません

どうでしょう。ちょっとややこしい話でしたが、このライフサイクルを理解していれば、UIViewControllerも再読み込みすることができます。必要な場面に遭遇したら試してみてください。