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 :

@interface RootViewController : UIViewController  {

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.

- (void)viewDidLoad {

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

}

}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>