だいたいそれでいいんじゃないの

つれつれなるkixixixixiの技術的なストック。http://reload.co.jp

UINavigationControllerをカスタムしたらUIViewControllerのviewWillAppearが呼ばれなくなった!そのときの

CustomNavigationControllerみたいものをつくってUINavigationCntrollerをカスタムしてiOSアプリをつくっていたら、起動時にCustomNavigationControllerに紐付いたUIViewControllerの viewWillAppear 等が呼ばれずはまったのでその備忘録を残しておきます。

なんでハマったのかというとUINavigationControllerDelegateを設定したのに下記をかいてなかったためでした。

- (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];
}

ついでにCustomNavigationControllerで viewWillAppear かいた場合は

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    /* something... */
}

としなくてならないようです。 また遷移時に処理を割りこませたいときは下記のように。

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [super pushViewController:viewController animated:animated];
    /* something... */
}

おなじようにUITabbarControllerの場合はこちら

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    [viewController viewWillAppear:YES];
    /* something... */
}

以上ですー