Trying to handle back navigation button action in iOS
Try this code using VIewWillDisappear
method to detect the press of The back button of NavigationItem:
-(void) viewWillDisappear:(BOOL)animated
{
if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound)
{
// Navigation button was pressed. Do some stuff
[self.navigationController popViewControllerAnimated:NO];
}
[super viewWillDisappear:animated];
}
OR There is another way to get Action of the Navigation BAck button.
Create Custom button for UINavigationItem of back button .
For Ex:
In ViewDidLoad :
- (void)viewDidLoad
{
[super viewDidLoad];
UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Home" style:UIBarButtonItemStyleBordered target:self action:@selector(home:)];
self.navigationItem.leftBarButtonItem=newBackButton;
}
-(void)home:(UIBarButtonItem *)sender
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
Swift :
override func willMoveToParentViewController(parent: UIViewController?)
{
if parent == nil
{
// Back btn Event handler
}
}
Execute action when back bar button of UINavigationController is pressed
One option would be implementing your own custom back button. You would need to add the following code to your viewDidLoad method:
- (void) viewDidLoad {
[super viewDidLoad];
self.navigationItem.hidesBackButton = YES;
UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(back:)];
self.navigationItem.leftBarButtonItem = newBackButton;
}
- (void) back:(UIBarButtonItem *)sender {
// Perform your custom actions
// ...
// Go back to the previous ViewController
[self.navigationController popViewControllerAnimated:YES];
}
UPDATE:
Here is the version for Swift:
override func viewDidLoad {
super.viewDidLoad()
self.navigationItem.hidesBackButton = true
let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Bordered, target: self, action: "back:")
self.navigationItem.leftBarButtonItem = newBackButton
}
func back(sender: UIBarButtonItem) {
// Perform your custom actions
// ...
// Go back to the previous ViewController
self.navigationController?.popViewControllerAnimated(true)
}
UPDATE 2:
Here is the version for Swift 3:
override func viewDidLoad {
super.viewDidLoad()
self.navigationItem.hidesBackButton = true
let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.plain, target: self, action: #selector(YourViewController.back(sender:)))
self.navigationItem.leftBarButtonItem = newBackButton
}
func back(sender: UIBarButtonItem) {
// Perform your custom actions
// ...
// Go back to the previous ViewController
_ = navigationController?.popViewController(animated: true)
}
Handle Back button NavigationController to push to another ViewController
Add this code in the webViewVc (not the one in the tabBar). Call addBackButton in ViewDidLoad
Note: You will need to change the image to one that you have in your assets and change the name of the TabBarVc to the one you have.
func addBackButton(_ viewController: UIViewController)
{
let backButton: UIBarButtonItem = UIBarButtonItem(image: UIImage(named: "Icon_back"), style: .plain, target: self, action: #selector(self.goToTabBar))
self.navigationItem.setLeftBarButton(backButton, animated: true)
}
func goToTabBar()
{
self.navigationController?.popViewController(animated: true)
self.navigationController?.present(TabBarVC(), animated: true, completion: nil)
}
How to actually catch when back button is pressed?
Try with following UINavigationBarDelegate
.
func navigationBar(navigationBar: UINavigationBar, didPopItem item: UINavigationItem)
Related Topics
Uitapgesturerecognizer Breaks Uitableview Didselectrowatindexpath
Detect When an iOS App Is Launched For the First Time
Check For Internet Connection Availability in Swift
Fade/Dissolve When Changing Uiimageview'S Image
How to Write Dispatch_After Gcd in Swift 3, 4, and 5
How to Create .Ipa File Using Xcode
Unique Values of Array in Swift
How to Set Back Button Text in Swift
How to Make Outlet Connection to a Constraint in Ib
How to Load Local HTML File into Uiwebview
Using Ssl in an Iphone App - Export Compliance
Enabling Auto Layout in iOS 6 While Remaining Backwards Compatible With iOS 5
Cordova App Not Displaying Correctly on Iphone X (Simulator)
Uiview and Initwithframe and a Nib File. How to Get the Nib File Loaded