如何改变“后退”按钮的标题上的导航栏(How do I change the title of th

2019-07-18 15:06发布

目前左栏按钮默认值是当前加载的一个,换句话说视图的视图的标题时该按钮被按下(后退键)被示出。

我想更改按钮上显示为其他文字。

我试图把下面的代码行中视图控制器的viewDidLoad方法,但它似乎并没有工作。

self.navigationItem.leftBarButtonItem.title = @"Log Out";

我该怎么办?

谢谢。

Answer 1:

这应该被放置在调用名为“新标题”的视图控制器的方法。 右键前推或popViewController声明。

UIBarButtonItem *newBackButton = 
        [[UIBarButtonItem alloc] initWithTitle:@"NewTitle" 
                                         style:UIBarButtonItemStyleBordered 
                                        target:nil 
                                        action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[newBackButton release];


Answer 2:

在ChildVC这个工作对我来说...

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

作品在斯威夫特呢!

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


Answer 3:

下面是backBarButtonItem的文档:

“当这个导航产品立即在堆栈顶部的项目之下,导航控制器派生从这个导航项目的导航栏上的后退按钮。[...]如果你想指定自定义图片或标题后退按钮,你可以指定一个自定义栏按钮项(与您的自定义标题或图片)这个属性,而不是“。

视图控制器A(“父”视图控制器):

self.title = @"Really Long Title";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Short" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;

当任何其它视图控制器B在导航堆栈的顶部,而A是正确的下方,B的后退按钮将具有标题‘短’。



Answer 4:

在Xcode 4.5使用情节串连图板,目前为止最简单的方法我已经找到了时返回按钮的值没有动态地改变是使用与视图控制器的导航项目相关联的“后退按钮”字段,你希望“后退”按钮,说些什么。

例如,在下面的屏幕截图,我要用于视图控制器(一个或多个),我推到有“返回”的返回按钮的标题的返回按钮。

当然,如果你需要后退按钮说每一次的东西略有不同,这将不起作用......有都在这里了,其他的解决方案。



Answer 5:

我知道,这个问题已经很老了,但是我发现了一个很好的解决方案。

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @"Custom Title";
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

从childView作品! 经测试与iOS 7。



Answer 6:

也许我是过于简单,但来自苹果的文档的措辞是:

如果未通过任一视图控制器的指定的自定义栏按钮项, 缺省的回按钮用于和它的标题被设置为前一视图控制器-即,视图控制器下一层上的标题属性的值堆栈。

上述标记为正确的溶液设定从父控制器默认按钮项。 这是正确的答案,但我通过改变解决问题self.title右推新控制器到NavigationController堆栈前的UIViewController财产。

这会自动更新一个控制器上的后退按钮的标题,只要你设置self.title回到它应该在什么viewWillAppear我看不到这种方法造成太多的问题。



Answer 7:

这项工作更好地为我。 尝试:

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


Answer 8:

在斯威夫特/ iOS8上,以下为我工作:

let backButton = UIBarButtonItem(
      title: "Back Button Text",
      style: UIBarButtonItemStyle.Bordered,
      target: nil,
      action: nil
);

self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;

从菲利普的回答移植。



Answer 9:

好吧,这里是这样的。 如果你有一个视图控制器“第一”和您浏览其他视图控制器“第二”按下一个按钮或者等你需要做一些工作。 首先,你需要创建“第二”视图控制器的viewDidLoad方法这样的BarButtonItem;

    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

当你做到这一点,你需要写在这样相同的.m文件“btnBack”动作代码;

-(IBAction)OnClick_btnBack:(id)sender  {
      [self.navigationController popViewControllerAnimated:YES];
    //[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES];
}

就这样。



Answer 10:

我有一个父视图控制器与一个很长的标题。 这导致在后面的按钮上的文字出血到子视图控制器的标题。

尝试很多不同的解决方案之后,这是我落得这样做(扩大在@ john.k.doe方法):

使用的Xcode 7.2,夫特2

  1. 在故事板,添加Navigation Item 视图控制器场景(没有孩子VC)

  1. Attributes Inspector新的Navigation Item中,类型space在字符Back Button场。 更多关于这一点。

  1. 视图控制器,添加以下代码:

片段:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.destinationViewController {
    case is ChildViewController:
        navigationItem.backBarButtonItem?.title = ""
    default:
        navigationItem.backBarButtonItem?.title = "Full Parent Title"
    }
}

说明:

返回按钮之类的属于父视图控制器。 该Navigation Item给你一个句柄返回按钮,这样你就可以在代码中或在故事板设置标题。

注意:

如果离开了Navigation Item Back Button文本作为默认空字符串,返回按钮标题将成为“返回”。

其他方法工作,为什么用这个?:

虽然它可能覆盖子视图控制器上的后退按钮标题,这是获得一个句柄它,直到它已经简单地闪现在屏幕上的挑战。

有些方法的建立一个新的后退按钮并覆盖现有之一。 我敢肯定它的工作原理,以及可能需要在某些用例。 但我更喜欢尽可能利用现有的API。

改变title父视图控制器的是对于某些情况最快溶液。 不过,所以你要管理国家这改变了父称号。 事情也变得混乱了Tab Bar Controller ,因为标题的变化引起的副作用与Tab Bar Item冠军。



Answer 11:

对于使用故事板只是选择父(不是持有目标视图之一)视图控制器框架(请确认您点击导航栏上右键,然后打开属性检查器中,在那里你会发现三个表单输入的。第三个“返回按钮”是我们所期待的。



Answer 12:

斯威夫特版本:

在你的孩子的ViewController:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.backItem?.title = "TEXT"
}


Answer 13:

这里是另一种方式来做到这一点。

在你父视图控制器,实现以下方法:

- (void) setBackBarButtonItemTitle:(NSString *)newTitle {
  self.navigationItem.backBarButtonItem.title = newTitle;
}

在你的孩子的视图控制器,当你要更改标题,这将工作:

NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

我从来没有能够一开始parentViewController物业工作:

[(ParentViewController *)(self.navigationController.parentViewController) setBackBarButtonItemTitle:@"New Title"];

我不知道这是否是一个错误或我不正确使用它。 但敛在第二到最后一个视图控制器viewControllers阵列指向父视图控制器和I可以正确调用parent方法与参考。



Answer 14:

好。 我个人讨厌所有这些选项。 因此,我来​​到了我自己。

根据这些信息,我都看见了。 看来,以前的视图控制器是在它自己的“后退”按钮的控制将在推视图控制器上呈现。

我创建了想要改变后退按钮控制器上的navigationItem延迟加载方法。

我的是一个邀请买家控制器

邀请买家是默认设置的文本。

但后退按钮需要被邀请

下面是我用来创建后退按钮的代码。

我把这个代码在控制器的实现The(.M)文件的顶部,它会自动推翻了超级的方法。

- (UINavigationItem *)navigationItem{
    UINavigationItem *item = [super navigationItem];
    if (item != nil && item.backBarButtonItem == nil)
    {
        item.backBarButtonItem = [[[UIBarButtonItem alloc] init] autorelease];
        item.backBarButtonItem.title = @"Invite";
    }

    return item;
}

我觉得这是一个更优雅的方式来做到这一点。

我把这个代码在一个地方,并在需要时自动被填充。

无需调用每个推送请求之前的代码。

希望这可以帮助



Answer 15:

UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];


Answer 16:

下面是答案:

viewDidAppear:animated (而不是在viewDidLoad )执行下列操作

- (void)viewDidAppear:(BOOL)animated
{
     [self.navigationController.navigationBar.backItem setTitle:@"anything"];

     // then call the super
     [super viewDidAppear:animated];
}

如果你想保持背部按键的形状。



Answer 17:

该解决方案中没有解释在这里为我工作。 所以我所做的就是从那里,我从下面的方式来到现场去掉标题:

self.title = @"";

因此,当新的场景呈现在后面的文本不会出现。

我absoluty同意,这是没有一个明确的解决方案在所有,但工作并没有对我的解释工作。



Answer 18:

对于斯威夫特:

    // Rename back button
    let backButton = UIBarButtonItem(
        title: "Back",
        style: UIBarButtonItemStyle.Plain, // Note: .Bordered is deprecated
        target: nil,
        action: nil
    )
    self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton


Answer 19:

我发现,最简单的方法来改变后退按钮的名称是到视图控制器设置标题为后退按钮的标题,然后更换titleview的视图控制器导航项目的定制标签与它是真实的名称。

像这样:

CustomViewController.m

@implementation CustomViewController

- (NSString*)title {
    return @"Back Button Title";
}

- (void)viewDidLoad {
    [super viewDidLoad];
    UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
    customTitleView.text = @"Navigation Bar Title";
    customTitleView.font = [UIFont boldSystemFontOfSize:20];
    customTitleView.backgroundColor = [UIColor clearColor];
    customTitleView.textColor = [UIColor whiteColor];
    customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    customTitleView.shadowOffset = CGSizeMake(0, -1);

    [customTitleView sizeToFit];

    self.navigationItem.titleView = [customTitleView autorelease];
}

@end

这会使你在UINavigationBar的标题看起来好像是本地人。 给视图控制器有分隔的标题和后退按钮标题的能力。

在视图控制器A和B的情况下,A是负责告诉它如何的后退按钮应该看看,在显示B中。

编辑:这也保持了后退按钮本地外观(左箭头栏按钮项)。



Answer 20:

此代码的工作了。 将这个导航控制器的根控制器上:

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


Answer 21:

我发现,这是最好的推到下一个视图控制器之前改变当前视图控制器的标题导航堆栈后退按钮的所需的文本。

例如

self.navigationItem.title = @"Desired back button text";
[self.navigationController pushViewController:QAVC animated:NO];

然后在viewDidAppear设置标题回到了原来的VC所需的标题。 瞧!



Answer 22:

林在iOS的新的,但我会提供我很简单重写导航控制器类的答案。 我有简单的覆盖push和pop方法和保存以前的视图控制器的标题。 对不起,在JS块粘贴。 在正常的代码块有点困惑如何过去吧。

 #import "MyCustomNavController.h" @implementation MyCustomNavController { NSString *_savedTitle; } - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated withBackBtnTitle:(NSString *)title { _savedTitle = self.topViewController.title; self.topViewController.title = title; [super pushViewController:viewController animated:animated]; } - (UIViewController *)popViewControllerAnimated:(BOOL)animated { [self.viewControllers objectAtIndex:self.viewControllers.count - 2].title = _savedTitle; return [super popViewControllerAnimated:animated]; } @end 



Answer 23:

self.navigationController.navigationBar.backItem.title = @"TEXT";

而在斯威夫特:

self.navigationController?.navigationBar.backItem?.title = "TEXT"


Answer 24:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] 
                                              initWithTitle:@"Log out" 
                                              style:UIBarButtonItemStyleDone 
                                              target:nil 
                                              action:nil] autorelease];

你可以把它。无论您在parrent控制器,它allowes你有不同的子视图differenct backbuttons代码一样。



Answer 25:

大多数解决方案的杀死后退按钮的原有风格(左箭头栏按钮),同时增加与所需的标题通常按钮。
因此,为了保持原有的风格有2种方式:
1:要使用无证按钮样式(110或类似的东西),我不喜欢做的事。 但是,如果你愿意,你可以找到如何做到这一点在这里,计算器。
第二:要使用我的Trenskow的想法。 我喜欢它,我用它有点改变。
相反,覆盖的 - (的NSString *)的头衔,我已经决定继续通过以下方式原标题(允许我使用笔尖的头衔,以及在按压状态下给定标题的BTW)。

- (void)viewDidLoad {
    [super viewDidLoad];
    static NSString * backButtonTitle=@"Back"; //or whatever u want

    if (![self.title isEqualToString:backButtonTitle]){

        UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
        customTitleView.text = self.title; // original title
        customTitleView.font = [UIFont boldSystemFontOfSize:20];
        customTitleView.backgroundColor = [UIColor clearColor];
        customTitleView.textColor = [UIColor whiteColor];
        customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
        customTitleView.shadowOffset = CGSizeMake(0, -1);

        [customTitleView sizeToFit];

        self.navigationItem.titleView = [customTitleView autorelease];
        self.title = backButtonTitle; 
    }
}

该解决方案的工作很好,它看起来本土。 此外,如果在viewDidLoad方法用它可以防止执行更多然后1次。
此外,我已经尝试了Jessedc的解决方案,但它看起来不错。 这导致从原来的以后退按钮的期望和背飞用户标题栏的变化可见。



Answer 26:

这对我的作品与以前公布答案的“简化”版本。

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];

backButton.title = @"Go Back";

self.navigationItem.backBarButtonItem = backButton;

记得把代码中的父视图控制器内(例如,有你的表视图或UITableViewController中的观点), 没有孩子或细节视图(如UIViewController中)。

您可以轻松地本地化后退按钮字符串是这样的:

backButton.title = NSLocalizedString(@"Back Title", nil);


Answer 27:

我们有两个VC的A和B.

如果你想改变标题B,写在一个验证码

- (IBAction)goToBViewController:(UIButton *)sender {

    BViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"VC"];
    UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Your title here"
                                                                  style:UIBarButtonItemStylePlain
                                                                 target:nil
                                                                 action:nil];
    [[self navigationItem] setBackBarButtonItem:newBackButton];
    [self.navigationController pushViewController:vc animated:NO];

}

雨燕4.1的Xcode 9.4

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "VC"])
let newBackButton = UIBarButtonItem.init(title: "Your title here", style: UIBarButtonItemStyle.plain, target: nil, action: nil)
navigationController?.navigationBar.topItem?.backBarButtonItem = newBackButton
navigationController?.pushViewController(secondViewController!, animated: true)


Answer 28:

斯坦的回答是最好的之一。 但它也有一个问题,当你使用一个标签栏控制器和更改控制器的标题,你可以too.So最好的答案只有改变view_controller.navigationItem.title并使用view_controller.navigationItem改变标签栏的标题.title伪的功能。 答案就在这里:(弧,并将其添加到视图中的viewDidLoad)

  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }

在自己用的,我让这样的功能,只是有在viewDidLoad中一行代码的功能。

+ (void)makeSubViewHaveBackButton:(UIViewController*) view_controller{
  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }
}


Answer 29:

如果你想不仅要后退按钮的文字更改为相同的文字,并保持原来的左箭头形状,而且还做一些事情,当用户单击后退按钮,我建议你有在我“一看CustomNavigationController ” 。



Answer 30:

问题:在导航栏中的“后退”的文字无法替代的。

原因:“返回”标签在推的图,因为在父视图控制器.title伪属性被设置为nil(或不初始化)之后的导航栏设定。

一个解决办法:如果你设置self.title =“无论......”你会看到,而不是“后退”会出现“什么......”推新视图控制器之后。



文章来源: How do I change the title of the “back” button on a Navigation Bar