back button callback in navigationController in iOS back button callback in navigationController in iOS ios ios

back button callback in navigationController in iOS


William Jockusch's answer solve this problem with easy trick.

-(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];}


In my opinion the best solution.

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

But it only works with iOS5+


it's probably better to override the backbutton so you can handle the event before the view is popped for things such as user confirmation.

in viewDidLoad create a UIBarButtonItem and set self.navigationItem.leftBarButtonItem to it passing in a sel

- (void) viewDidLoad{// change the back button to cancel and add an event handlerUIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@”back”style:UIBarButtonItemStyleBorderedtarget:selfaction:@selector(handleBack:)];self.navigationItem.leftBarButtonItem = backButton;[backButton release];}- (void) handleBack:(id)sender{// pop to root view controller[self.navigationController popToRootViewControllerAnimated:YES];}

Then you can do things like raise an UIAlertView to confirm the action, then pop the view controller, etc.

Or instead of creating a new backbutton, you can conform to the UINavigationController delegate methods to do actions when the back button is pressed.