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

后端 未结 8 568
天命终不由人
天命终不由人 2020-12-06 18:54

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?.titl         


        
相关标签:
8条回答
  • 2020-12-06 19:15

    You can easily do that from the storyboard by setting the title of the previous screen. Image explaining how to do that from storyboard - or you can do that by adding the following code to the view controller you're navigating BACK to.

    override func viewWillDisappear(_ animated: Bool) {
            super.viewWillDisappear(true)
            let backItem = UIBarButtonItem()
            backItem.title = "Title"
            navigationItem.backBarButtonItem = backItem
        }
    
    0 讨论(0)
  • 2020-12-06 19:21

    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 stack 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
            }
        }
    
    0 讨论(0)
  • 2020-12-06 19:22

    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.

    0 讨论(0)
  • 2020-12-06 19:23

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

    0 讨论(0)
  • 2020-12-06 19:23

    This is the way:

    extension UINavigationController {
        func addCustomBackButton(title: String = "Back") {
            let backButton = UIBarButtonItem()
            backButton.title = title
            navigationBar.topItem?.backBarButtonItem = backButton
        }
    }
    
    0 讨论(0)
  • 2020-12-06 19:23

    in viewDidLoad()

        let backBarButtonItem = UIBarButtonItem(title: "You back button title here", style: .plain, target: nil, action: nil)
        navigationItem.backBarButtonItem = backBarButtonItem
    
    0 讨论(0)
提交回复
热议问题