【问题标题】:UIBarButtonItem Title ChangeUIBarButtonItem 标题更改
【发布时间】:2012-06-14 18:07:54
【问题描述】:

我有以下 UIBarButton 项:

  UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 100.0f, 45.0f, 30.0f)];
    [backButton setBackgroundImage:backButtonImage forState:UIControlStateNormal];
    [backButton addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchDown];
    backButton.titleLabel.text = @"Back";
    backButton.titleLabel.font = [UIFont fontWithName:@"texgyreadventor-regular.otf" size:20.0f];
    backButton.titleLabel.textColor = [UIColor whiteColor];
    UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
    _backItem = backItem;

在其他一些方法中,我将其设置在导航栏上,如下所示:

[self.navigationItem setLeftBarButtonItem:_backItem];

到目前为止,一切都按预期进行。但就在我将它添加到顶部的导航栏之前,我想更改它的文本。这是我尝试做的一件事:

self.navigationItem.leftBarButtonItem.title = @"NEW TITLE";

但是,这不起作用。如何在运行时动态添加标题?

【问题讨论】:

  • @Legolas 这需要drawRect 方法...那你在说什么?
  • 另一种解决方案是您可以全局获取 NSMutableString(类级别)。将“Back”放入字符串并传递给按钮标签,然后在添加之前将字符串替换为“New Title”。
  • @KhalidUsman 这不是一场与低效率的竞赛。

标签: iphone objective-c uibutton uinavigationbar uibarbuttonitem


【解决方案1】:

您可以使用以下命令再次访问该按钮:

UIView* view = self.navigationItem.leftBarButtonItem.customView;
UIButton* button = (UIButton*)view;
[button setTitle: @"NEW TITLE" forState: UIControlStateNormal];

你开始使用 iOS Nayefc了吗,我看到你这几天有很多问题:)

【讨论】:

    【解决方案2】:

    对于任何看起来的人(就像我刚才一样),在较新版本的 iOS 中,接受的答案不再有效。它变成了 barButton.title,这是一个可读写的 String?(在 Swift 中)或 NSString(在 Obj-C 中)。

    【讨论】:

      【解决方案3】:

      而不是

      self.navigationItem.leftBarButtonItem.title = @"NEW TITLE";
      

      使用

      UIButton *backButton = (UIButton *)self.navigationItem.leftBarButtonItem.customView;
      backButton.titleLabel.text = @"changed";
      

      更新: 如果您想在将标题添加到导航栏之前更改标题,请执行以下操作

      UIButton *backButton = (UIButton *)_backItem.customView;
      backButton.titleLabel.text = @"changed";
      

      【讨论】:

      • 那行不通,因为它会改变backButton 的标题,而该标题不在导航栏上。
      • @Nayefc,是的,我来自安曼,你到底想改变什么,从你的问题来看,你似乎想改变你添加的按钮的标题?请解释更多
      • 就是这样。它不会改变什么。
      • 那很奇怪,一定是你做错了什么
      • @Nayefc 发布您的问题是什么,您采取了哪些步骤,请使用清晰的语言来解释您想要实现的目标以及您的问题:)
      【解决方案4】:

      解决方法如下:

       [button setTitle:@"Back" forState:UIControlStateNormal];
      

      必须定义状态。

      【讨论】:

      • 你应该接受“Paul de Lange”的回答,因为他给了你这个答案:)
      • 它不起作用。他正在做的是检索该按钮并将其分配给一个按钮,更改标题并且从不将其设置回来。我将编辑他的答案并将其标记为正确。
      • 谢谢奥马尔! Nayefc,您不必重新设置它,我只需检索指向按钮的指针,然后更改该地址处对象的标题属性。顺便说一句:我不知道你可以接受自己的答案,现在我明白为什么有些人可以无缘无故地享有如此高的声誉。
      • 保罗不,它没有用。除非您将指针设置为弱指针,否则它将不起作用。这说得通。我也测试了它。我编辑了您的答案并想将其标记为正确,但您恢复了更改并对我进行了-1,所以我想我不会。 :)
      • 保罗,我也测试过。所以我可以保证它不起作用。不过,让我解释一些理论:button 并不像您想象的那样指向导航栏中的栏按钮项。默认情况下,它将根据 ARC 的定义保留一个新对象。要使其按照您希望的方式运行,您必须在其上指定__weak。此外,UIButtons 需要将标题与状态匹配。这个答案得到了 WWDC 的一位 Apple 工程师的支持——上周我有一个认识的人问按钮和它们的标题是如何工作的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多