UINavigationController “back button” custom text?

后端 未结 16 1453
Happy的楠姐
Happy的楠姐 2020-11-28 01:41

The \"back button\" of a UINavigationController by default shows the title of the last view in the stack. Is there a way to have custom text in the back button

相关标签:
16条回答
  • 2020-11-28 02:08

    in your init method, add the following code:

    - (id)initWithStyle:(UITableViewStyle)style {
        if(self = [super init]) {
    
            //...
    
            UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                                                 style:UIBarButtonItemStylePlain 
                                                target:self 
                                                action:@selector(goBack)];
            self.navigationItem.leftBarButtonItem = customBackButton;
            [customBackButton release];
    
            //...
        }
        return self;
    }
    

    then add a simple method, to allow viewcontroller dismissing:

    -(void)goBack {
        [self.navigationController popViewControllerAnimated:YES];  
    }
    
    0 讨论(0)
  • 2020-11-28 02:08

    I've discovered something interesting. If you subclass the UINavigationController and override the pushViewController:animated: method and do something like this: (bear in mind that I'm using ARC)

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] 
     initWithTitle: @"Back" 
     style: UIBarButtonItemStyleBordered
     target: nil action: nil];
    
    viewController.navigationItem.backBarButtonItem = backButton;
    
    [super pushViewController:viewController animated:animated];
    

    Then for all ViewControllers that are pushed with your navigation controller will have the "Back" button in them automatically. If you want to change the text for certain view controllers you can try and maybe cast the viewcontroller to a certain class or your own custom protocol (which your viewcontroller inherits from which could have a method like backButtonText or something silly like that) which can give you certain information on the viewcontroller that's coming in sothat you can customize the back button text for it. Now the back button text is taken care of in a place which should hold the responsibility solely. I have to admit that creating a new button to change the text sucks, but oh well.

    Can anyone think of a reason why not to do it like this? Atleast you don't have to fiddle with viewcontroller titles or have to remember to create a new back button before pushing the viewcontroller on the navigation controller.

    0 讨论(0)
  • 2020-11-28 02:13

    The title of the back button defaults to the previous view's title so a quick trick I use is to place the following code on the previous view's .m file.

    -(void)viewWillAppear:(BOOL)animated {
    
        // Set title
        self.navigationItem.title=@"Original Title";
    }
    
    -(void)viewWillDisappear:(BOOL)animated {
    
        // Set title
        self.navigationItem.title=@"Back";
    }
    
    0 讨论(0)
  • 2020-11-28 02:14

    Doing this in code remove the back button style of the UINavigationConroller. If you add a Navigation Item in each of yours views, you can set the title of the back botton in the StoryBoard.

    0 讨论(0)
  • 2020-11-28 02:16

    I found a handy solution to this by simply setting the title of the controller before pushing another controller onto the stack, like this:

    self.navigationItem.title = @"Replacement Title";
    [self.navigationController pushViewController:newCtrl animated:YES];
    

    Then, make sure to set the original title in viewWillAppear, like this:

    -(void)viewWillAppear:(BOOL)animated
    {
      ...
      self.navigationItem.title = @"Original Title";
      ...
    }
    

    This works because the default behavior of UINavigationController when constructing the back button during a push operation is to use the title from the previous controller.

    0 讨论(0)
  • 2020-11-28 02:17

    I know this is an old question and the answers' kind of out updated!

    The easy way is to do this in parent ViewController:

    i.e the one that takes you to next view controller.

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