我有一个UIButton,我想更新它的标题,但我不必总是为每个状态执行此操作,如下所示:
[myButton setTitle:@"Play" forState:UIControlStateNormal];
[myButton setTitle:@"Play" forState:UIControlStateHighlighted];
[myButton setTitle:@"Play" forState:UIControlStateSelected];
有更好的方法吗?
答案 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)
就是
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