67 votes

Vérifier si un UIViewController est sur le point de se faire sauter depuis une pile de navigation?

J'ai besoin de savoir quand mon contrôleur de vue est sur le point de sortir d'une pile de navigation pour pouvoir effectuer une action.

Je ne peux pas utiliser -viewWillDisappear, car cette option est appelée lorsque le contrôleur de vue est déplacé hors de l'écran pour TOUTE raison (comme si un nouveau contrôleur de vue était affiché en haut).

J'ai particulièrement besoin de savoir quand le contrôleur est sur le point de sauter.

Toutes les idées seraient géniales, merci d'avance.

92voto

quijibo Points 326

Remplacez la méthode ViewWillDisappear dans le VC présenté, puis cochez l'indicateur IsMovingFromParentViewController dans la substitution et effectuez une logique spécifique. Dans mon cas, je cache la barre d’outils des contrôleurs de navigation. Il faut encore que votre CV présenté comprenne qu'il a été poussé mais pas parfait.

33voto

caoimghgin Points 155

Heureusement, au moment où la méthode viewWillDisappear est appelée, le viewController a déjà été supprimé de la pile. Nous savons donc que le viewController éclate car il n'est plus dans le fichier self.navigationController.viewControllers.

 - (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    if ((self.navigationController) && (![self.navigationController.viewControllers containsObject:self])) {
        NSLog(@"I've been popped!");
    }
}
 

30voto

MattDiPasquale Points 23842

Essayez primordial willMoveToParentViewController: (au lieu de viewWillDisappear:) dans la sous-classe personnalisée d' UIViewController.

Appelé juste avant que le contrôleur est ajouté ou supprimé d'un conteneur view controller.

- (void)willMoveToParentViewController:(UIViewController *)parent
{
    [super willMoveToParentViewController:parent];
    if (!parent) {
        // `self` is about to get popped.
    }
}

16voto

Tom Elliott Points 705

Je ne pense pas qu'il y ait un message explicite à ce sujet, mais vous pouvez sous-classer UINavigationController et substituer - popViewControllerAnimated (bien que je ne l'aie pas essayé auparavant).

Sinon, s'il n'y a pas d'autres références au contrôleur de vue, pourriez-vous ajouter à son - dealloc?

14voto

Ronald Nepsund Points 97

Cela fonctionne pour moi.

 - (void)viewDidDisappear:(BOOL)animated
{
    if (self.parentViewController == nil) {
        NSLog(@"viewDidDisappear doesn't have parent so it's been popped");
        //release stuff here
    } else {
        NSLog(@"PersonViewController view just hidden");
    }
}
 

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