是否可以通过编程方式更新UIButton标题/文本?

Geo*_*old 94 iphone uibutton ios uicontrolstate

我有一个UIButton,当按下时,会显示一个新视图,用户可以在其中更改某些设置.当视图被取消时,我想更新其标题/文本UIButton以反映新状态.我打电话给:

[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];
Run Code Online (Sandbox Code Playgroud)

但它似乎永远不会改变IB中指定的原始文本/标题.

小智 111

我解决了为UIControlStateNormal设置title参数的问题,它自动适用于其他状态.问题似乎是当你设置另一个UIControlState时.

[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)


Ken*_*isa 51

您是否在视图控制器类中将按钮指定为IBOutlet,并且它是否正确连接为Interface Builder中的插座(从新引用插座拖动到文件所有者并选择您的UIButton对象)?当我看到这些症状时,这通常是我遇到的问题.


编辑:虽然这不是这种情况,但是如果你为按钮设置了属性标题,那么你也会发生类似这样的事情,然后你尝试更改标题而不是属性标题.

  • ObjC没有'假装'可以将消息发送到nil,因为它*可以*发送消息给nil ... (20认同)
  • 宾果,就是这样,谢谢.我真的希望Objective-C在这种情况下抛出NullPointerException,而不是默默地假装可以向nil对象发送消息.这几乎每天都咬我......唉! (4认同)

Osc*_*car 13

我发现了另一个问题.它可能是iOS 5中引入的一个错误,但我想我会指出遇到它的其他任何人.

如果未在XIB中为按钮设置任何默认文本,则以编程方式设置时不会显示任何文本.如果您在XIB中设置了文本,则随后以编程方式分配给按钮的任何文本都将被截断为默认文本的大小.

最后,如果您使用按钮显示视图然后调用另一个视图(如ActionSheet)然后将其关闭,则以编程方式分配给按钮的文本将被删除,按钮标题将返回到您设置的任何内容在XIB中.

  • 我有截断问题(以编程方式将文本更改为更长的文本),因此我在文本末尾添加了额外的空格,以便在将文本更改为较长的单词时"保留"该空格.这对我有用. (2认同)
  • 似乎对此的修复是使用方法[_button setTitle:@"title"forState:UIControlStateNormal]; 而不是直接访问_button.titleLabel.text属性.坚持使用方法调用,你可能会得到你想要的东西. (2认同)

Jes*_*ack 12

即使Caffeine Coma的问题得到解决,我也想提出另一个潜在的原因,标题不会出现在UIButton上.

如果您使用UIButton设置图像

- (void)setImage:(UIImage *)image forState:(UIControlState)state
Run Code Online (Sandbox Code Playgroud)

它可以涵盖标题.我发现这很困难,并想象你们中的一些人最终会因为同样的原因阅读这个页面.

请改用此方法

- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state
Run Code Online (Sandbox Code Playgroud)

按钮图像和标题不会受到影响.

我使用.xib中创建的以编程方式创建的按钮和按钮对此进行了测试


Vla*_*eys 11

迅速:

    button.setTitle("Click", for: .normal)
Run Code Online (Sandbox Code Playgroud)


小智 7

对于swift:

button.setTitle("Swift", forState: UIControlState.Normal)                   
Run Code Online (Sandbox Code Playgroud)