【问题标题】:How to change text on a back button如何更改后退按钮上的文本
【发布时间】:2010-10-24 13:13:24
【问题描述】:

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

我尝试了以下方法,但没有成功:

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

谢谢。

【问题讨论】:

  • 请记住,后退按钮有标题是有原因的。通过将标题更改为“返回”,您正在剥夺用户有关按钮返回的信息。

标签: ios iphone cocoa-touch uinavigationitem


【解决方案1】:

试试

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

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

【讨论】:

  • 对不起,我现在没有机会测试这个,但这是否应用了内置后退按钮的左尖形状,还是保持 UIBarButtonItem 的默认矩形形状?
  • 我其实不确定。我假设它只会自动保持后退按钮的形状,因为您正在设置 backButton 属性,但您必须对其进行测试才能找出答案。我也很好奇。
  • 是的,成功了!是的,它改变了标题,是的,保存了形状。感谢您的帮助。
  • 注意:后退按钮被保留两次[1x来自alloc,1x来自属性的retain]。但是,如果您不更改后退按钮,它实际上是无害的。
  • 查看下面 Marco 的评论 - 您应该在即将推送新内容的控制器上调用它,而不是在被推送的控制器上调用。
【解决方案2】:

Marc W 的方法在我确定将其应用于哪个控制器后效果很好:重新命名的控制器,而不是顶部的控制器。所以如果这是导航堆栈:

(bottom)  ControllerA -> ControllerB  (top)

...并且您想在 ControllerB 位于顶部时显示的后退按钮中为 ControllerA 提供更短的标题,您将属性更改应用于 ControllerA

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

【讨论】:

  • 这是一个非常重要的细节。
  • wcochran,它确实适用于故事板,只需确保您设置了父控制器的后退按钮。因此,如果您的控制器 A 指向控制器 B(通过情节提要 segue),那么为了在控制器 B 中自定义后退按钮的文本,您必须在情节提要编辑器中为控制器 A 设置“后退按钮”属性。
  • 谢谢马可。我对这个问题的感觉是,每个人都在试图回答(并且回答正确),但不是为了被问到的问题。你基本上正确地击中了头部的钉子。谢谢!
  • +1 了解重要细节。除非您了解此答案,否则上述答案对您不起作用。
  • 你说得对,新 MacBook One 的键盘有点难以适应。
【解决方案3】:

您可以在情节提要中完成。找到要返回的视图控制器(标题较长的那个),选择它的 Navigation Item,然后打开 Attributes Inspector (Alt+Cmd+4),插入自定义的 Back Button 标题。

【讨论】:

  • 这正是我所需要的,因为我希望所有后退按钮都有文本“后退”而不是之前控制器的导航标题。
  • 请注意,后退按钮文本设置在下一个控制器被推送的视图上,而不是您当前显示的视图控制器上。
  • 这是一个很好的简单解决方案,但是不要将所有后退按钮重命名为“后退”,这违背了 Apple 的 HIG 并破坏了部分目的一个后退按钮。 :(
  • 效果很好。请务必保存 Storyboard 文件。我的第一次尝试没有成功,因为我没有注意到情节提要没有保存!是的,您更改了您来自的视图控制器上的 BACK 按钮!
  • 很好,但是如果我只想留下箭头,不带任何文字怎么办? :)
【解决方案4】:

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

这就是我所做的。

如果您使用 tableView 导航到不同的视图...放上代码:

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

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

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

【讨论】:

  • 谢谢你亲爱的@Ben。这正是我想要的:)。
【解决方案5】:

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

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

例如,假设我们有一个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"

【讨论】:

    【解决方案6】:

    这对我来说效果更好。试试看:

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

    【讨论】:

    • 很好的答案很完美。它应该被标记为例外。
    【解决方案7】:

    如果您使用情节提要:

    1. 打开故事板
    2. 在 Document Outline 窗口中找到您想要的 ViewController 返回
    3. 单击该 ViewController 的导航项
    4. 在属性资源管理器中将返回按钮值更改为您的自定义磁贴

    就是这样,享受吧……

    【讨论】:

      【解决方案8】:

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

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

      【讨论】:

        【解决方案9】:
        [self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc]
          initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]];
        

        这对我有用。

        【讨论】:

          【解决方案10】:

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

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

          请注意,我们不需要在最新 iOS 版本的末尾包含 autorelease

          希望这会有所帮助!

          【讨论】:

            【解决方案11】:

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

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

            【讨论】:

            • 使用代码回答时,请始终说明所提供代码的问题所在以及您的代码如何解决问题。
            【解决方案12】:

            如果您不想拥有头衔,这对我有用!

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

            【讨论】:

              【解决方案13】:
              self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
              

              【讨论】:

                【解决方案14】:

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

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

                【讨论】:

                • 将来您可能希望在不适合您的答案上发布这样的帖子作为 cmets。
                【解决方案15】:

                我的解决方案是在视图控制器被推送到导航堆栈时设置标题,并在推送的 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";
                }
                

                【讨论】:

                  【解决方案16】:

                  如果你不仅想改变后退按钮的文字并保持原来的左箭头形状,还想在用户点击后退按钮时做一些事情,我建议你看看我的“CustomNavigationController ”。

                  【讨论】:

                    【解决方案17】:

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

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

                    【讨论】:

                      【解决方案18】:

                      要更改返回按钮的标题,请参考下面的代码

                      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`
                      

                      【讨论】:

                        【解决方案19】:

                        在 Swift5 中,无法编辑 backBarButton。因此,我们需要先隐藏 backBarButtom,然后使用自定义的 leftbarButtom 替换 backBarButtom。以下是详细解决方案:https://stackoverflow.com/a/63868300/13939003

                        【讨论】:

                          【解决方案20】:

                          这对我有用:

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

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2011-05-04
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多