如何在后退按钮上更改文本


90

默认情况下,后退按钮使用ViewController的标题作为文本。是否可以在不更改视图控制器标题的情况下更改后退按钮上的文本?我需要这样做是因为我有一个视图控制器,该标题的标题太长而无法显示,在这种情况下,我只想显示“ Back”作为后退按钮的标题。

我尝试了以下无效的方法:

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

谢谢。


3
请记住,后退按钮具有标题是有原因的。通过将标题更改为“返回”,您正在抢劫用户有关该按钮返回到什么位置的信息。
西蒙(Simon)

Answers:


167

尝试

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

通过查看Apple的UINavigationItem文档中的backBarButtonItem文档,我发现了这一点。


1
抱歉,我现在没有机会进行测试,但这是否应用了内置“后退”按钮的左角形状,还是保留了UIBarButtonItem的默认矩形形状?
马可(Marco)2009年

我实际上不确定。我假设自从您设置backButton属性以来,它只会自动保持后退按钮的形状,但是您必须对其进行测试才能找到答案。我也很好奇
Marc W,2009年

2
是的,它有效!是的,更改标题,是的,保存形状。感谢您的帮助。
Ilya Suzdalnitski,2009年

1
注意:后退按钮保留两次[从alloc保留1x,从属性的客房保留1x]。但是,如果您不更改后退按钮,则实际上是无害的。
开尔文

29
请参阅下面的Marco注释-您应该在将要推送新内容的控制器上调用此函数,而不是在被推送的控制器上调用它。
条例草案

97

一旦我弄清楚了将哪个控制器应用于该控制器,Marc W的方法就可以很好地工作:重新命名的控制器,而不是顶部的控制器。因此,如果这是导航堆栈:

(bottom)  ControllerA -> ControllerB  (top)

...并且您想在ControllerB在顶部时显示的后退按钮中为ControllerA赋予一个较短的标题,请将属性更改应用到ControllerA

因此,它更多地是在的上下文中self.title,与其他左/右栏按钮设置器不同。


13
这是一个非常重要的细节。
条例草案

4
wcochran,它确实适用于情节提要,只需确保设置了父控制器的“后退按钮”即可。因此,如果您有一个指向控制器B的控制器A(通过情节提要segue),则要自定义控制器B中“后退”按钮的文本,必须在情节提要编辑器中为控制器A设置“后退按钮”属性。
中断

谢谢马可。我对这个问题的感受是,每个人都在尝试回答(并回答正确),但不是针对正在提出的问题。您基本上可以正确地击中头部。感谢那!
2013年

+1表示重要细节。除非您理解此答案,否则以上答案将对您不起作用。
baptzmoffire

没错,新款MacBook One的键盘很难适应。
Mason G. Zhwiti 2015年

48

您可以在情节提要中进行操作。找到要返回的视图控制器(标题较长的视图控制器),选择其导航项,然后打开“属性”检查器(Alt + Cmd + 4),插入自定义“后退按钮”标题。

在此处输入图片说明


这正是我需要的,因为我希望所有的后退按钮都具有文本“ Back”,而不是先前控制器的导航标题。
戴夫

8
只是要注意,后退按钮文本是在下一个控制器被推入的视图上设置的,而不是当前显示的视图控制器。
达比奥

这是一个很好的简单解决方案,但是不要将所有后退按钮都重命名为“后退”,因为这违背了苹果的HIG,并且破坏了后退按钮的部分用途。:(
塞缪尔·古德温

很棒。只要确保保存情节提要文件即可。我的第一次尝试没有用,因为我没有注意到情节提要板没有保存!是的,您可以更改来自您的视图控制器上的BACK按钮!
EricWas15年

很好,但是如果我只想留下箭头而没有任何文本怎么办?:)
Iurii Vasylenko 2015年

40

谢谢马可...这帮助了我...

这是我所做的。

如果您使用tableView导航到不同的视图,请输入以下代码:

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

在您的didSelectRowAtIndexPath方法中...第一个控制器...控制器A。

当您导航到控制器B时,该按钮的标题为“返回”。


1
谢谢亲爱的@Ben。那正是我在寻找的:)。
Arslan '04年

12

后退按钮从父视图控制器的标题中拉出其文本。

在父视图控制器(点击后退按钮时显示的视图控制器)中,将其自己的标题设置为后退按钮上的所需文本。

例如,假设我们有一个RootViewController类。在表格视图中单击某个单元格时,我们将推送一个实例SecondViewController。我们想要的后退按钮SecondViewController实例 “ Home”。

RootViewController.mviewDidLoad方法中:

self.title = @"Home";

SecondViewController.mviewDidLoad方法中:

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

如果您希望后退按钮显示为“后退”,请将父视图控制器的标题设置为@"Back";。


10

这对我来说更好。尝试:

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

1
好答案很完美。应该标记为例外。
穆罕默德·里兹旺

9

如果您使用情节提要:

  1. 开放故事板
  2. 在“文档大纲”窗口中,找到要返回到的ViewController。
  3. 单击该ViewController的导航项
  4. 在“属性资源管理器”中,将“后退按钮”的值更改为您的自定义图块

就是这样,享受...


5

在MonoTouch中,以下工作(在父控制器的ViewDidLoad中):

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

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

这对我有用。


3

在视图加载时,在父视图控制器中设置后退按钮:

- (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];

}

请注意,我们不需要autorelease在末尾附带最新的iOS版本。

希望这可以帮助!


1

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

这个对我有用。您可以将“ back”替换为其他内容。


在回答代码时,请始终说明所提供代码的问题是什么以及您的代码如何解决该问题。
Lukas Knuth

1

如果您不想获得标题,这对我有用!

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

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

0

我终于知道为什么这些答案一开始对我不起作用。我在情节提要中设置标题。当我在代码上设置标题时。有用!

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

将来,您可能希望将这样的帖子作为对您不合适的答案的评论。
Keith Smiley

0

我的解决方案是在将视图控制器推送到导航堆栈时设置标题,并在推送的vc关闭之前使用委托方法重置它:

所以当我按下另一个视图控制器时,将标题更改放入调用视图控制器中:

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

和委托回调函数(我在viewWillDissapear中调用)中:

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

0

如果您不仅要更改“后退”按钮的文本并保持原始的左箭头形状,而且还希望在用户单击“后退”按钮时执行某些操作,则建议您浏览一下“ CustomNavigationController ”。


0

//您可以通过在上一个视图控制器中设置标题来实现此目的,如下所示

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"
}

0

有关更改后退按钮标题的信息,请参见以下代码

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`

-1

这对我有用:

self.navigationController.navigationBar.topItem.title = "Back"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.