43 votes

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

J'ai un projet avec un NavigationController, qui contient en IB, la première ViewController à montrer. C'est juste le modèle par défaut lors de la création du projet.

Dans le premier viewController, je reçois un événement que j'envoie à l'appDelegate, et je veux la remplacer rootview avec un autre. Ne pas aller à une prochaine.

Donc je fais :

- (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, la première viewcontroller n'est pas poped. Et le second est logiquement affiche avec un bouton de retour.

Je veux juste remplacer ce premier point de vue de l'autre, comme le début du processus de navigation.

88voto

albertamg Points 18630

De UINavigationController de référence:

Cette méthode (popViewControllerAnimated:) enlève le haut-vue-contrôleur de la pile et la rend le nouveau haut de la pile de la vue active contrôleur. Si la vue contrôleur au sommet de la pile est la racine de la vue-contrôleur, ce la méthode ne fait rien. En d'autres termes, vous ne pouvez pas pop le dernier élément sur la pile.

Vous pouvez essayer de l' setViewControllers:animated: méthode à la place.

- (void) goNext {

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

17voto

phix23 Points 24407

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

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X