How to change text on a back button

IosIphoneCocoa TouchUinavigationitem

Ios Problem Overview


By default the back button uses as a text on it a title of a viewcontroller. Can I change text on the back button without changing a title of a view controller? I need this because I have a view controller which title is too long to display and in this case I would like to display just "Back" as a caption for back button.

I tried the following which didn't work:

self.navigationItem.leftBarButtonItem.title = @"Back";

Thanks.

Ios Solutions


Solution 1 - Ios

Try

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

I found that by looking at the backBarButtonItem docs in Apple's docs for UINavigationItem.

Solution 2 - Ios

Marc W's approach worked great once I figured out which controller to apply it to: the one being re-titled, not the one on top. So if this is the navigation stack:

(bottom)  ControllerA -> ControllerB  (top)

...and you want to give a shorter title for ControllerA in the back-button displayed when ControllerB is on top, you apply the property change to ControllerA.

So it's more in the context of self.title, not like the other left/right-bar-button setters.

Solution 3 - Ios

You can do it in the storyboard. Find the view controller you want to go back to (the one with the long title), select it's Navigation Item, and open the Attributes Inspector (Alt+Cmd+4), insert the custom Back Button title.

enter image description here

Solution 4 - Ios

Thanks Marco... that helped me...

Here is what i did.

If you are using a tableView to navigate to different views... put the code:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

In your didSelectRowAtIndexPath method... of the first Controller... Controller A.

When you navigate to Controller B the button will have the title "Back".

Solution 5 - Ios

The back button pulls its text from the title of the parent view controller.

In the parent view controller (the view controller that appears when you tap the back button), set its own title as the desired text on the back button.

For example, let's say we have a RootViewController class. When we click a cell in its table view, we push an instance of SecondViewController. We want the back button of the SecondViewController instance to read, "Home."

in the viewDidLoad method of RootViewController.m:

self.title = @"Home";

in the viewDidLoad method of SecondViewController.m:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];    

If you want your back button to read, "Back," set the title of the parent view controller to @"Back";

Solution 6 - Ios

This work better for me. Try :

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];

Solution 7 - Ios

If you are using storyboard:

  1. Open StoryBoard
  2. In Document Outline window find ViewController to which you want to return to
  3. Click on Navigation Item of that ViewController
  4. In Attributes explorer change Back Button value to your custom tile

That is it, enjoy...

Solution 8 - Ios

And in MonoTouch the following works (in ViewDidLoad of the parent controller):

NavigationItem.BackBarButtonItem = new UIBarButtonItem( "Back", UIBarButtonItemStyle.Plain, null);

Solution 9 - Ios

[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc]
  initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]];

This worked for me.

Solution 10 - Ios

In your parent view controller, set the back button when view loads:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    self.navigationItem.backBarButtonItem = 
       [[UIBarButtonItem alloc] initWithTitle:@"title" 
                                        style:UIBarButtonItemStylePlain 
                                       target:nil 
                                       action:nil];

}

Notice that we don't need to include autorelease at the end with the latest iOS version.

Hope this helps!

Solution 11 - Ios

[self.navigationController.navigationBar.backItem setTitle:@"back"];

It works for me. You can replace "back" with something else.

Solution 12 - Ios

This one worked for me if you don't want to have a title!

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];

Solution 13 - Ios

self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];

Solution 14 - Ios

I finally knew why these answers did not work for me at first. I set the title in storyboard. When i set the title on code. it works!

self.navigationItem.title = @"Main Menu";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];

Solution 15 - Ios

My solution was to set title when the view controller is pushed to navigation stack and reset it by use of delegate method before pushed vc closes:

So I put the title change in calling view controller when I push the other view controller like:

self.pushedVC = [self.storyboard instantiateViewControllerWithIdentifier:@"pushedVCIdentifier"];
self.pushedVC.delegate = self;   
[self.navigationController pushViewController:self.pushedVC animated:YES];
self.title = @"Back";

and in delegate callback function (which I invoke in viewWillDissapear):

-(void)pushedVCWillClose:(PushedVC *)sender
{
    self.title = @"Previous Title";
}

Solution 16 - Ios

If you want not only to change the text of the Back button and remain the original left-arrow shape, but also to do something when user clicks the Back button, I recommend you to have a look around my "CustomNavigationController".

Solution 17 - Ios

For to change back button title, refer below code

InformationVC *infoController=[[InformationVC alloc]init];[self.navigationController infoController animated:YES];

//Below code changed back button title on InformationVC page.
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Information" style: UIBarButtonItemStylePlain target: nil action: nil];
self.navigationItem.backBarButtonItem = backBarButton;`enter code here`

Solution 18 - Ios

//You can achieve this by setting the title in the previous view controller as shown below

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for this view
        self.navigationItem.title = "My Title"

}

override func viewWillDisappear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for back button in next view 
        self.navigationItem.title = "Back"
}

Solution 19 - Ios

In Swift5, the backBarButtom cannot be edited. Hence, we need to hide the backBarButtom first, then use a customised leftbarButtom to replace backBarButtom. Here is the detailed solution: https://stackoverflow.com/a/63868300/13939003

Solution 20 - Ios

This worked for me:

self.navigationController.navigationBar.topItem.title = "Back"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionIlya SuzdalnitskiView Question on Stackoverflow
Solution 1 - IosMarc WView Answer on Stackoverflow
Solution 2 - IosMarcoView Answer on Stackoverflow
Solution 3 - IosalyokaView Answer on Stackoverflow
Solution 4 - IosBen CallView Answer on Stackoverflow
Solution 5 - IosRose PerroneView Answer on Stackoverflow
Solution 6 - IosFelipe FMMobileView Answer on Stackoverflow
Solution 7 - IosAntonijoDevView Answer on Stackoverflow
Solution 8 - IosBillFView Answer on Stackoverflow
Solution 9 - Iosuser1004911View Answer on Stackoverflow
Solution 10 - IosZorayrView Answer on Stackoverflow
Solution 11 - IosohmerView Answer on Stackoverflow
Solution 12 - IosgpichlerView Answer on Stackoverflow
Solution 13 - Iosuser2783798View Answer on Stackoverflow
Solution 14 - Iosuser2547667View Answer on Stackoverflow
Solution 15 - IosDespotovicView Answer on Stackoverflow
Solution 16 - IosjianpxView Answer on Stackoverflow
Solution 17 - IosKiran KView Answer on Stackoverflow
Solution 18 - IosJohn CartoView Answer on Stackoverflow
Solution 19 - IosMichael Lin LiuView Answer on Stackoverflow
Solution 20 - IosRockyView Answer on Stackoverflow