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

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

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

有没有更好的办法?

【问题讨论】:

    标签: iphone swift


    【解决方案1】:

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

    在 Objective-C 中:

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

    在 Swift 中:

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

    UIButton 文档解释了原因:

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

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

    【讨论】:

    【解决方案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”。

        【讨论】:

        • 谢谢!如果您只设置一次颜色,这可以在界面生成器中完成,但具有相同的洞察力 - 您需要为每个状态设置颜色。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-23
        • 2021-06-09
        • 2010-10-24
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多