iOSのUINavigationControllerにスワイプバックの機能がありますが、少しスワイプバックした時点で指を離してキャンセルした場合に、UIViewControllerのライフサイクルイベントがどのような順序で発生するか不明瞭だったので調べてみました。
使用したデバイスは iPhone 8 (iOS 11.3) です。
上から順番に時系列で並べてあります。
MasterViewControllerが親の画面、DetailViewControllerが子供の画面です。
DetailViewControllerが表示されている状態から始まり、スワイプバックでMasterViewControllerに戻ろうとしてキャンセルしています。
No. | 操作 | MasterViewController | DetailViewController |
---|---|---|---|
1 | 少しスワイプ | ||
2 | viewWillDisappear | ||
3 | viewWillAppear | ||
4 | 指を離す | ||
5 | viewWillDisappear | ||
6 | viewDidDisappear | ||
7 | viewWillAppear | ||
8 | viewDidAppear |
画面表示時にデータを読み込んでいる場合は、
- viewWillAppearで読み込み処理などを始めた場合は、viewWillDisappearまたはviewDidDisappearでキャンセルする。
- viewWillAppearではなくviewDidAppearで開始する。
などの工夫が必要そうです。