UINavigationController : viewWillAppear n’est pas appelé…
Grosse surprise ce soir : viewWillAppear n’est pas appelé lorsque qu’on met en place un UINavigationController dans son code, sans utiliser Interface Builder… Ben là, c’est n’importe quoi !
Heureusement il y a un remède pas trop compliqué, il suffit de pointer l’utilisation de UINavigationControllerDelegate sur le UIViewController à la base de la navigation.
Donc dans .h on a par exemple :
UINavigationController *navigationController;
}
@property (nonatomic, retain) UINavigationController *navigationController;
Et dans .m, on pointe le delegate sur soi-même et on rajoute les 2 fonctions de UINavigationControllerDelegate.
Ne pas oublier aussi d’ajouter la « view » de navigationController à la hiérarchie sinon… ben le système de nav ne sera jamais visible.
navigationController = [[UINavigationController alloc] init];
[navigationController setDelegate:self];
SplashViewController *tempoVC = [[SplashViewController alloc] initWithNibName:@"SplashViewController" bundle:nil];
[navigationController pushViewController:tempoVC animated:NO];
[tempoVC release];
[self.view addSubview:navigationController.view];[super viewDidLoad];
}
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ([viewController respondsToSelector:@selector(viewDidAppear:)]) {
[viewController viewDidAppear:animated];
}
}
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ([viewController respondsToSelector:@selector(viewWillAppear:)]) {
[viewController viewWillAppear:animated];
}
}