iPhone – Remplacement de rootview dans le contrôleur de navigation

J’ai un projet avec un NavigationController, qui contient dans IB le premier ViewController à afficher. C’est juste le modèle par défaut lors de la création du projet.

Dans ce premier viewController, je reçois un événement que j’envoie à l’application AppDelegate et je souhaite le remplacer par un autre. Ne pas aller à un prochain.

Moi aussi :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // Add the navigation controller's view to the window and display. self.window.rootViewController = self.navigationController; [self.window makeKeyAndVisible]; return YES; } - (void) goNext { [self.navigationController popViewControllerAnimated:NO]; NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease]; [self.navigationController pushViewController:nextWindow animated:NO]; } 

Mais cela ne fonctionne pas, le premier viewcontroller n’est pas affiché. Et le second est affiché logiquement avec un bouton retour.

Je veux juste remplacer cette première vue par l’autre comme début du processus de navigation.

De la référence UINavigationController :

Cette méthode (popViewControllerAnimated 🙂 supprime le contrôleur de vue supérieure de la stack et fait du nouveau haut de la stack le contrôleur de vue actif. Si le contrôleur de vue en haut de la stack est le contrôleur de vue racine, cette méthode ne fait rien. En d’autres termes, vous ne pouvez pas afficher le dernier élément de la stack.

Vous pouvez essayer la setViewControllers:animated: place.

 - (void) goNext { NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease]; [self.navigationController setViewControllers:[NSArray arrayWithObject:detailViewController] animated:YES]; } 

Si le contrôleur de vue en haut de la stack est le contrôleur de vue racine, popViewControllerAnimated ne fait rien. En d’autres termes, vous ne pouvez pas afficher le dernier élément de la stack.

Pour remplacer le contrôleur de vue racine, utilisez cette méthode:

 - (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated