有没有办法在一次更新所有 UIControlStates 的 UIButton 上设置标题?

Posted

技术标签:

【中文标题】有没有办法在一次更新所有 UIControlStates 的 UIButton 上设置标题?【英文标题】:Is there a way to setTitle on a UIButton that updates all UIControlStates at once? 【发布时间】:2010-11-25 09:34:07 【问题描述】:

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

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

有没有更好的办法?

【问题讨论】:

【参考方案1】:

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

在 Objective-C 中:

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

在 Swift 中:

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

UIButton 文档解释了原因:

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

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

【讨论】:

这不是我的经历 .custom 类型的按钮也不是这样。 请参阅下面的***.com/a/61159133/826946,了解涉及标题文本自定义颜色的情况【参考方案2】:

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

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

【讨论】:

你为什么要这样做? 在一行中设置多个状态按钮的标题。 这是所有控件的确切方式。 UI Slider 在所有状态下都不会改变。有帮助 这不起作用,因为状态是NS_OPTIONS。如果你使用UIControlStateNormal|UIControlStateHighlighted,当按钮显示时你不能看到标题。【参考方案3】:

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

【讨论】:

【参考方案4】:

2019

只是

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

【讨论】:

【参考方案5】:

答案:

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”,而是为同时选中和高亮d的组合状态设置标题“All”。

【讨论】:

谢谢!如果您只设置一次颜色,这可以在界面生成器中完成,但具有相同的洞察力 - 您需要为每个状态设置颜色。

以上是关于有没有办法在一次更新所有 UIControlStates 的 UIButton 上设置标题?的主要内容,如果未能解决你的问题,请参考以下文章

如果列值取决于文件路径,有没有办法在一次读取多个文件时将文字作为列添加到 spark 数据框中?

如何在一次操作中解压缩和 gzip 提取的文件?

有没有办法在一段时间后重置 mongodb 数据库的所有集合?

一次隐藏/显示剑道网格​​中的所有列

在一组客户端中持久保存服务器端数据[重复]

swoole 内存泄露的问题有没有好的办法解决