2

Comment définir une action sur backButtonItem dans la barre de navigation? J'ai une barre de navigation, quand j'appuie sur le bouton de retour, j'ai besoin d'alerter un message à l'utilisateur, et seulement après la réaction de l'utilisateur - revenir à la vue précédente. Comment puis-je le faire? Merci!Comment définir une action sur backButtonItem dans la barre de navigation?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    //no one field don't changed yet 
    isDirty = FALSE; 

    //edited user 
    //set default values 
    newData = [data copy]; 

    //setting navigation controller rigth button 
    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Save" 
                   style:UIBarButtonSystemItemDone 
                    target: self 
                    action: @selector(saveBtnUserClick)]; 
    self.navigationItem.rightBarButtonItem = rightButton; 
    [rightButton release]; 


    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                    style:UIBarButtonSystemItemDone 
                    target: self 
                    action: @selector(backBtnUserClick)]; 

    self.navigationItem.backBarButtonItem = leftButton; 
    [leftButton release]; 
} 

// et ma méthode pour la réaction

-(IBAction) backBtnUserClick 
{ 
    NSLog(@"\n Back pressed"); 

    //back to previous view 
    [self.navigationController popViewControllerAnimated: TRUE]; 
} 

Répondre

2

Cela ressemble à un travail pour UIAlertView. Au lieu d'appeler popViewControllerAnimated: dans vos méthodes IBAction, alloc/init un UIAlertView et présentez-le. Ensuite, lorsque l'utilisateur appuie sur un bouton sur le UIAlertView, ignorez le UIAlertView et appelez le popViewControllerAnimated:.

- (IBAction)backBtnUserClicked:(id)object { 
    UIAlertView *av = [[[UIAlertView alloc] initWithMessage:@"Wait!" 
      delegate:self 
       cancelButtonTitle:@"Ok" 
       otherButtonTitles:nil] autorelease]; 
    [av show]; 
} 

Dans vos UIAlertViewDelegate méthodes appellent popViewControllerAnimated:.

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    [[self navigationController] popViewControllerAnimated:YES]; 
} 

Pour définir l'action sur le bouton de retour:

[[[self navigationController] leftBarButtonItem] setTarget:self]; 
[[[self navigationController] leftBarButtonItem] setAction:@selector(backBtnUserClicked:)]; 
+0

Thanx! Mais!! Comment puis-je définir la méthode pour le bouton de retour du contrôle de navigation. Je ne peux pas le faire. – yozhik

+0

Voir ma modification ci-dessus. –

11

Ajouter le < UINavigationControllerDelegate> dans le fichier d'en-tête et l'utiliser dans le .m

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem  *)item 
{ 
    //insert your back button handling logic here 
    // let the pop happen 
    return YES; 
}  
+4

Est-ce que ce devrait être le 'UINavigationBarDelegate' à la place? – Chris

+0

Ceci est la bonne implémentation pour shouldPopItem tous les autres moyens sont défectueux. http://www.hkwebentrepreneurs.com/2013/11/ios-prevent-back-button-navigating-to.html –