【问题标题】:UIButton title text colorUIButton 标题文本颜色
【发布时间】:2011-10-05 22:21:13
【问题描述】:

我正在为 UIButton 设置文本颜色

headingButton.titleLabel.textColor = [UIColor colorWithRed:36/255.0 
                                                     green:71/255.0 
                                                      blue:113/255.0 
                                                     alpha:1.0];

它不会改变我在另一个工作代码中使用的相同代码的颜色。

【问题讨论】:

标签: ios objective-c iphone uibutton textcolor


【解决方案1】:

使用

Objective-C

[headingButton setTitleColor:[UIColor colorWithRed:36/255.0 green:71/255.0 blue:113/255.0 alpha:1.0] forState:UIControlStateNormal];

斯威夫特

headingButton.setTitleColor(.black, for: .normal)

【讨论】:

  • 这行得通。但原始问题中的代码也经常有效。有谁知道为什么标题有时无法响应问题中的代码?
  • 原因是当按钮被点击或以其他方式改变状态时,按钮中的代码会重置 titleLabel 的属性以匹配按钮对该状态的内部设置。
  • 苹果的文档说明如下:“不要使用标签对象来设置文本颜色或阴影颜色。而是使用该类的setTitleColor:forState:和setTitleShadowColor:forState:方法做出这些改变。”但没有真正解释“为什么”。
  • 最重要的是,当您为 UIControlStateNormal 设置颜色时,无需为所有其他状态设置它(如果您希望按钮在按下时看起来相同)。
  • 如何在应用委托中全局更改按钮文本颜色。也许使用 UIButton.appearance().setTitleColor?
【解决方案2】:

我创建了一个从UIButton 扩展的自定义类MyButton。然后在Identity Inspector里面加上这个:

在此之后,将按钮类型更改为自定义

然后您可以为您的UIButton 设置不同状态的textColorUIFont 等属性:

然后我还在 MyButton 类中创建了两个方法,当我希望将 UIButton 显示为突出显示时,我必须在我的代码中调用它们:

- (void)changeColorAsUnselection{
    [self setTitleColor:[UIColor colorFromHexString:acColorGreyDark] 
               forState:UIControlStateNormal & 
                        UIControlStateSelected & 
                        UIControlStateHighlighted];
}

- (void)changeColorAsSelection{
    [self setTitleColor:[UIColor colorFromHexString:acColorYellow] 
               forState:UIControlStateNormal & 
                        UIControlStateHighlighted & 
                        UIControlStateSelected];
}

您必须将titleColor 设置为正常、突出显示和选中UIControlState,因为根据UIControlState 的文档,一次可以有多个状态。 如果您不创建这些方法,UIButton 将显示选择或突出显示,但它们不会保留在您在 UIInterface Builder 中设置的 UIColor 中,因为它们仅可用于短暂显示选择,而不是用于显示选择本身。

【讨论】:

  • 最后一个代码sn-p不应该使用|而不是&吗?
【解决方案3】:

在 Swift 中:

更改标签文本颜色与为UIButton 更改颜色完全不同。要更改 UIButton 的文本颜色,请使用以下方法:

self.headingButton.setTitleColor(UIColor(red: 107.0/255.0, green: 199.0/255.0, blue: 217.0/255.0), forState: UIControlState.Normal)

【讨论】:

    【解决方案4】:

    swift 5 版本:

    使用默认的内置颜色:

    1. button.setTitleColor(UIColor.green, for: .normal)

    您可以通过 RGB 方法使用自定义颜色:

    1. button.setTitleColor(UIColor(displayP3Red: 0.0/255.0, green: 180.0/255.0, blue: 2.0/255.0, alpha: 1.0), for: .normal)

    【讨论】:

      【解决方案5】:

      除了颜色之外,我的问题是我使用 textlabel 设置文本

      bt.titleLabel?.text = title
      

      我解决了更改为:

      bt.setTitle(title, for: .normal)
      

      【讨论】:

        猜你喜欢
        • 2012-07-14
        • 2011-01-29
        • 2015-09-14
        • 2011-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多