Customize UINavigationBar āBack Buttonā
Summary:
This article will try to dig a little bit about UINavigationController and UINavigationBar. The story starts with me trying customzieĀ āBack Buttonā on UINavigationBar, which helps user to navigate back to precede ViewController.
Letās start from scratch:
After creating a fresh new Xcode project with two ViewControllers(VC) on StoryBoard. User could easily navigate from one VC to another by clicking on the UIBarButtonItem on the UINavigationBar. The StoryBoard would look like the following:
When trying to run this simply application on iOS Simulator. User will realize the Title of Back Button on the second VC is notĀ āFirst View Controllerā, as it should be for most of the cases. Instead, it looks like:
āBackā, yes, the Title was changed by System automatically toĀ āBackā because the Title of parent VC is too long.
If the Title of first VC is changed toĀ āFirstā, then runnning application again, user would see:
So, when the Title of first VC is too long, the second VC will change the text of back button toĀ āBackā automatically.
After a quick check with Reference of navigationItem of UIViewController. I could change theĀ āback buttonā by using:
self.navigationItem.backBarButtonItem.title = @"Custom";
But doesnāt work at all. So another dig on this, found this:
So, basically it is saying theĀ āBack Buttonā I wish to change is associated with Previous View Controller. Thus, the title of it should be changed in theĀ āParent View Controllerā, not in Current View Controller. This blows my mind. Also, the reference ofĀ backBarButtonItem could be found by Ā āCommand + ClickingāĀ onĀ backBarButtonItem:
Then, the above code was moved to theĀ āFirstVC.mā file.Ā
But still nothing changed. Keep diggingā¦
Based on several answers on StackOverflow.com, I realized the property navigationItem in UIViewController is readonly. So, I use this piece of code instead:
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Custom" style:UIBarButtonItemStylePlain target:nil action:nil];
This code totally rocks.
Conclusion:Ā
ChangeĀ backBarButtonItem in Parent ViewController. Not current ViewController.
Thanks for reading.











