NavigationControllerが管理するViewControllerのviewWillAppear:animatedおよびviewDidAppear:animatedがコールされない場合の対処方法
UITabBarControllerで複数のNavigation Controllerを切り替える形式のUIを実装し、動作確認してみた。すると、各Navigation Controllerが管理するView ControllerではviewWillAppear:animatedおよびviewDidAppear:animatedがコールされていないことに気がついた。対処方法を調べてみると、まさに次の記事に記載されている現象だった。
上記リンク先の記事でも説明されている通り、Navigation Controllerを管理するクラスにてUINavigationControllerDelegateを実装し、各Navigation Controllerのデリゲートにこのクラスを指定する。そして、次のようなコードを追加すれば、適切なタイミングでNavigation Controllerが管理するView ControllerのviewWillAppear:animatedおよびviewDidAppear:animatedがコールされるようになる。
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { [viewController viewWillAppear:animated]; } - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated { [viewController viewDidAppear:animated]; }