有没有办法在UIButton上setTitle一次更新所有UIControlStates?

时间:2009-09-03 18:30:45

标签: iphone swift

我有一个UIButton,我想更新它的标题,但我不必总是为每个状态执行此操作,如下所示:

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

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

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

有更好的方法吗?

5 个答案:

答案 0 :(得分:61)

根据文档,您只需要致电:

在Objective-C中:

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

在斯威夫特:

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

UIButton文档解释了原因:

  

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

即,如果您只设置正常值,则其他状态将在设置时引用它。

答案 1 :(得分:7)

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

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

答案 2 :(得分:1)

2019

就是

yourButton.setTitle("Click me", for: .normal)

答案 3 :(得分: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)
}

(如果您使用其他状态(例如,已禁用),则还必须添加它们的组合才能循环播放)

注意:UIControl.State是一组选项,因此可以通过以下方式设置标题:

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

没有为选中状态和突出显示状态都设置标题“全部”,而是为同时选中并突出显示 d的组合状态设置标题“全部”。

答案 4 :(得分:0)

您可以为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