甘いものが好きです

iOS App開発時に感じた疑問や課題、その他の雑感などを書いていきます。

NavigationControllerが管理するViewControllerのviewWillAppear:animatedおよびviewDidAppear:animatedがコールされない場合の対処方法

UITabBarControllerで複数のNavigation Controllerを切り替える形式のUIを実装し、動作確認してみた。すると、各Navigation Controllerが管理するView ControllerではviewWillAppear:animatedおよびviewDidAppear:animatedがコールされていないことに気がついた。対処方法を調べてみると、まさに次の記事に記載されている現象だった。

UINavigationController配下のviewControllerのviewWillAppear/viewDidAppearが呼ばれない件 - いけしょーのコソアド:コレもソレもアレもドレも

上記リンク先の記事でも説明されている通り、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];
}