Développement iPhone, webdesign et SEO à Montréal

Il n'y a pas de problèmes, que des solutions.

UINavigationController : viewWillAppear n’est pas appelé…

without comments

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

}

}

Written by yannbouschet

mars 5th, 2011 at 11:38

Leave a Reply