我有一个 UIButton,我想更新它的标题,但我宁愿不必总是为每个状态都这样做,如下所示:
[myButton setTitle:@"Play" forState:UIControlStateNormal];
[myButton setTitle:@"Play" forState:UIControlStateHighlighted];
[myButton setTitle:@"Play" forState:UIControlStateSelected];
有没有更好的办法?
根据文档,您只需要调用:
在 Objective-C 中:
[myButton setTitle:@"Play" forState:UIControlStateNormal];
在斯威夫特:
myButton.setTitle("Play", for: .normal)
UIButton 文档解释了原因:
通常,如果未为状态指定属性,则默认使用 UIControlStateNormal 值。如果未设置 UIControlStateNormal 的值,则该属性默认为系统值。因此,您至少应该设置正常状态的值。
也就是说,如果您只设置正常值,其他状态将在设置时引用它。
或者您可以通过以下方式设置标题:
[myButton setTitle:@"Play" forState:UIControlStateNormal|UIControlStateHighlighted|UIControlStateSelected];
您可以为 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
只是
yourButton.setTitle("Click me", for: .normal)
答案:
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 ”。