How to Change back button title on navigation controller in swift3?

TechChain picture TechChain · Nov 9, 2016 · Viewed 28k times · Source

I want to change the title of backbutton to any name in swift 3.I tried many ways but none of them worked for me.

self.navigationItem.backBarButtonItem?.title="Title"
self.navigationController?.navigationItem.backBarButtonItem?.title="Title"

Just for information i have written below code in appdelegate.

let backImage : UIImage = UIImage(named:"backArrow")!
UINavigationBar.appearance().barTintColor = UIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, 0), for: .default)
IQKeyboardManager.sharedManager().enable = true
self.window?.backgroundColor = UIColor.white

Answer

Sandeep Bhandari picture Sandeep Bhandari · Nov 9, 2016

Navigation item back button name will be same as the title of previous view controller which is pushing it to the navigation stack :)

So if VC A pushes VC B, back button in VC B will be A.

So all you can do is, to change the title of the previous viewController before pushing the new viewController using code :)

self.navigationItem.title = "ABCD"

And in ViewWillAppear of VC A,you can revert the title back to whatever it was earlier :)

self.navigationItem.title = "Back to xyz"

All that being said, if you don't want all this circus :) you can simply hide the default back button using,

self.navigationItem.hidesBackButton = true

in your VC B, create a UIBarButton item, set whatever the title you want to set and then set that as leftBarButtonItem :) using,

self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: NSLocalizedString("ABCD", comment: "ABCD"), style: .plain, target: self, action:#selector(self.abcdTapped:)

of course now that will not show "<" icon :) Now if you want that as well you can add it as a image to back bar button item :) but its cumbersome :)

Hope it helps :)