87 votes

Comment extraire deux vues à la fois d'un contrôleur de navigation?

Je souhaite passer à la troisième vue de la pile de navigation et revenir à la première vue.

Je sais comment afficher une vue à la fois:

 [self.navigationController popViewControllerAnimated:YES];
 

Mais comment puis-je faire deux à la fois?

Merci...

130voto

Meet Points 1847

Vous pouvez aussi essayer cela entre la pile du contrôleur de navigation

 NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
for (UIViewController *aViewController in allViewControllers) {
    if ([aViewController isKindOfClass:[RequiredViewController class]]) {
        [self.navigationController popToViewController:aViewController animated:NO];
    }
}
 

64voto

budidino Points 552

Vous pouvez essayer quelque chose comme ça:

 int viewsToPop = 2;
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex: self.navigationController.viewControllers.count-viewsToPop-1] animated:YES];
 

43voto

chown Points 25161

Vous pouvez pop à la "racine" (première) - vue-contrôleur avec popToRootViewControllerAnimated:

[self.navigationController popToRootViewControllerAnimated:YES];

// If you want to know what view controllers were popd:
// NSArray *popdViewControllers = [self.navigationController popToRootViewControllerAnimated:YES];

UINavigationController Référence:

Pop tous les contrôleurs de vue sur la pile à l'exception de la racine-vue-contrôleur et les mises à jour de l'affichage.

Valeur De Retour
Un tableau d'affichage des contrôleurs de sauté de la pile.

29voto

Kenpachi Points 1578
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];   

15voto

Tieme Points 13569

Si vous voulez juste pop 2 à la fois parce que votre rootViewController est (moyen) "plus loin", puis 2 vous pourriez envisager d'ajouter une catégorie à UIviewController par exemple:

UINavigationController+popTwice.h

#import <UIKit/UIKit.h>
@interface UINavigationController (popTwice)

- (void) popTwoViewControllersAnimated:(BOOL)animated;

@end

UINavigationController+popTwice.m

#import "UINavigationController+popTwice.h"

@implementation UINavigationController (popTwice)

- (void) popTwoViewControllersAnimated:(BOOL)animated{
    [self popViewControllerAnimated:NO];
    [self popViewControllerAnimated:animated];
}

@end

L'importation de la catégorie #import "UINavigationController+popTwice.h" quelque part dans votre mise en œuvre et d'utiliser cette ligne de code pour pop 2 contrôleurs à la fois:

[self.navigationController popTwoViewControllersAnimated:YES];

n'est-ce pas formidable? :)

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