106 votes

de retour bouton de rappel dans navigationController dans iOS

J'ai poussé une vue sur la manette de navigation et lorsque j'appuie sur le bouton de retour, il va à la vue précédente automatiquement. Je veux faire quelques choses lors de l'arrière est enfoncé avant de les faire éclater la vue en dehors de la pile. Qui est à l'arrière bouton de fonction de rappel?

163voto

ymutlu Points 1923

William Jockusch de répondre à résoudre ce problème avec un truc facile.

-(void) viewWillDisappear:(BOOL)animated {
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) {
       // back button was pressed.  We know this is true because self is no longer
       // in the navigation stack.  
    }
    [super viewWillDisappear:animated];
}

85voto

Blankarsch Points 401

À mon avis la meilleure solution.

- (void)didMoveToParentViewController:(UIViewController *)parent
{
    if (![parent isEqual:self.parentViewController]) {
         NSLog(@"Back pressed");
    }
}

Mais il ne fonctionne qu'avec iOS5+

27voto

roocell Points 1286

il est probablement préférable de remplacer le bouton retour de sorte que vous pouvez gérer l'événement avant le point de vue est sauté pour des choses telles que la confirmation de l'utilisateur.

dans le viewDidLoad créer un UIBarButtonItem et de définir soi-même.navigationItem.leftBarButtonItem à elle en passant un sel

- (void) viewDidLoad
{
// change the back button to cancel and add an event handler
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(handleBack:)];

self.navigationItem.leftBarButtonItem = backButton;
[backButton release];

}
- (void) handleBack:(id)sender
{
// pop to root view controller
[self.navigationController popToRootViewControllerAnimated:YES];

}

Ensuite, vous pouvez faire des choses comme soulever une UIAlertView pour confirmer l'action, puis de la pop la-vue-contrôleur, etc.

Ou au lieu de créer un nouveau bouton retour, vous pouvez les rendre conformes à la UINavigationController délégué des méthodes pour effectuer des actions lors de l'arrière est enfoncé.

6voto

Anum Malik Points 51

Pour "AVANT de les faire éclater la vue en dehors de la pile" :

- (void)willMoveToParentViewController:(UIViewController *)parent{
    if (parent == nil){
        NSLog(@"do whatever you want here");
    }
}

3voto

George Harley Points 11

Si vous ne pouvez pas utiliser "viewWillDisappear" ou une méthode similaire, essayez de la sous-classe UINavigationController. C'est l'en-tête de la classe:

#import <Foundation/Foundation.h>
@class MyViewController;

@interface CCNavigationController : UINavigationController

@property (nonatomic, strong) MyViewController *viewController;

@end

La mise en œuvre de la classe:

#import "CCNavigationController.h"
#import "MyViewController.h"

@implementation CCNavigationController {

}
- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
    @"This is the moment for you to do whatever you want"
    [self.viewController doCustomMethod];
    return [super popViewControllerAnimated:animated];
}

@end

En revanche, vous avez besoin de relier cette viewController personnalisé NavigationController, donc, dans votre viewDidLoad méthode habituelle de votre viewController ce faire:

@implementation MyViewController {
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        ((CCNavigationController*)self.navigationController).viewController = self;
    }
}

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