33

我有一个 UIButton,我想更新它的标题,但我宁愿不必总是为每个状态都这样做,如下所示:

[myButton setTitle:@"Play" forState:UIControlStateNormal];
[myButton setTitle:@"Play" forState:UIControlStateHighlighted];
[myButton setTitle:@"Play" forState:UIControlStateSelected];

有没有更好的办法?

4

5 回答 5

64

根据文档,您只需要调用:

在 Objective-C 中:

[myButton setTitle:@"Play" forState:UIControlStateNormal];

在斯威夫特:

myButton.setTitle("Play", for: .normal)

UIButton 文档解释了原因:

通常,如果未为状态指定属性,则默认使用 UIControlStateNormal 值。如果未设置 UIControlStateNormal 的值,则该属性默认为系统值。因此,您至少应该设置正常状态的值。

也就是说,如果您只设置正常值,其他状态将在设置时引用它。

于 2009-09-03T18:34:33.107 回答
6

或者您可以通过以下方式设置标题:

[myButton setTitle:@"Play" forState:UIControlStateNormal|UIControlStateHighlighted|UIControlStateSelected];
于 2014-12-17T07:04:51.233 回答
1

您可以为 UIButton 创建一个类别:

@implementation UIButton (Addition)
-(void)setTitleForAllStates:(NSString *)title {
     //you can add/remove this area : UIControlStateApplication, UIControlStateDisabled, UIControlStateReserved
     [self setTitle:title forState:UIControlStateNormal];
     [self setTitle:title forState:UIControlStateSelected];
     [self setTitle:title forState:UIControlStateHighlighted];
}
@end
于 2015-08-14T09:06:39.587 回答
1

2019

只是

yourButton.setTitle("Click me", for: .normal)
于 2019-01-02T14:08:28.107 回答
1

答案:

button.setTitle("All", for: .normal)

或者

button.setTitle("All", for: [])

通常是不正确的,因为它仅在尚未设置某些状态的标题时才有效。例如:

button.setTitle("N", for: .normal)
button.setTitle("HL", for: .highlighted)
button.setTitle("All", for: .normal)

在此代码按钮之后,突出显示状态的标题仍然为“HL”。因此,在一般情况下,要更改所有使用状态的标题,您必须遍历所有这些状态:

let states: [UIControl.State] = [.normal, .highlighted, .selected, [.highlighted, .selected]]
for state in states {
  button.setTitle("All", for: state)
}

(如果您使用其他状态,例如 .disabled,您还必须将它们的组合添加到循环中)

注意: UIControl.State 是一组选项,因此设置标题:

button.setTitle("All", for: [.selected, .highlighted])

不会为选中状态和高亮状态设置标题“All”,而是为同时选中和高亮显示的组合状态设置标题“All

于 2020-04-11T15:19:57.467 回答