Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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
like image 832
TechChain Avatar asked Nov 09 '16 10:11

TechChain


People also ask

How do I customize the navigation bar in Swift?

Go to the ViewController. swift file and add the ViewDidAppear method. a nav helper variable which saves typing. the Navigation Bar Style is set to black and the tint color is set to yellow, this will change the bar button items to yellow.

How do I make a back button in Swift?

Back-button text is taken from parent view-controller's navigation item title. So whatever you set on previous view-controller's navigation item title, will be shown on current view controller's back button text. You can just put "" as navigation item title in parent view-controller's viewWillAppear method.

What is navigation Controller in Swift?

A navigation controller is a container view controller that manages one or more child view controllers in a navigation interface. In this type of interface, only one child view controller is visible at a time.


5 Answers

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 :)

like image 161
Sandeep Bhandari Avatar answered Dec 10 '22 02:12

Sandeep Bhandari


You will have to set the backBarButtonItem property of the navigationItem of the viewController that you push the said viewController from.

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.plain, target: nil, action: nil)

However, you must set this for each viewController.

like image 30
Sparr Avatar answered Dec 10 '22 02:12

Sparr


This is the way:

extension UINavigationController {
    func addCustomBackButton(title: String = "Back") {
        let backButton = UIBarButtonItem()
        backButton.title = title
        navigationBar.topItem?.backBarButtonItem = backButton
    }
}
like image 37
Valerio Avatar answered Dec 10 '22 02:12

Valerio


In Swift 3.0 put below code in appdelegate didFinishLaunchingWithOptions method its worked perfectly for me

let backImage = UIImage(named: "BackNavigation")?.withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -80.0), for: .default)

The last line will remove the title of Navigation Back Button if you don't want to remove title then just comment it

like image 25
arunjos007 Avatar answered Dec 10 '22 03:12

arunjos007


I didn't find the answer that I was looking for so I share with you my solution.

Sometimes you have to change the text of the back button in the parent ViewController and not in the ViewController where seems to be defined the back button, remember that a navigation controller stacks ViewControllers one after another.

In my case I did this on the function prepare(for segue: ) of the "ParentViewController":

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "showChildViewController" {
        if let childViewController = segue.destination as? ChildViewController {
            let backItem = UIBarButtonItem()
            backItem.title = "Back"
            navigationItem.backBarButtonItem = backItem
        }
    }
like image 22
Jose Briones Avatar answered Dec 10 '22 03:12

Jose Briones