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.