为啥我无法更改 UIButton 文本颜色?

Posted

技术标签:

【中文标题】为啥我无法更改 UIButton 文本颜色?【英文标题】:Why am I not able to change UIButton text-color?为什么我无法更改 UIButton 文本颜色? 【发布时间】:2016-12-01 14:47:20 【问题描述】:

我正在尝试在 Swift 3 上以编程方式更改 UIButton 的文本颜色。

我已经在其他按钮中完成了它,但整个项目中只有一个我无法更改颜色并且我找不到原因(我可以从情节提要手动更改它,但我需要以编程方式更改它的颜色)。要更改其他按钮中的文本颜色,我执行了以下操作:

customButton.tintColor = UIColor.red

而且效果很好。除了我在UITableViewCell 中的一个UIButton 之外,我无法以编程方式将文本颜色更改为UIButton。不过,我可以手动更改它(使用情节提要)。

这是我用于自定义 UITableViewCell 的代码:

@IBOutlet weak var customButton: UIButton!

override func awakeFromNib() 
    super.awakeFromNib()
    
    customButton.tintColor = UIColor.blue
    customButton.backgroundColor = UIColor.yellow

但它只会将背景颜色更改为黄色。

这是我的故事板配置(我不知道它是否与此目的相关):

我知道与 UIButton 的连接运行良好,因为背景颜色正在发生变化,但随后,

为什么我无法更改其文本颜色?我错过了什么吗?

提前致谢!

【问题讨论】:

【参考方案1】:

问题

设置tintColor 仅适用于buttonType = .custom。当您使用UIButton() 创建按钮时,默认的buttonType 将是.system,这将覆盖您的全局titleLabeltintColor,因为配置了特定的states

解决方案

如果您希望系统UIButton在按下按钮时淡出titleLabel的行为,您需要为每个状态设置titleColor,如下所示:

let button = UIButton()
button.setTitleColor(UIColor.red, for: .normal)

否则你可以使用.custom,直接设置tintColor

let button = UIButton(type: .custom)
button.tintColor = UIColor.red

【讨论】:

现在可以了,但我不明白为什么。在我项目的其余按钮中,我可以使用customButton.tintColor = UIColor.red 直接更改它。为什么这里不一样?还是与 按钮的状态有关,我不太明白你的意思是什么? 谢谢!最后,故事板是错误的线索。【参考方案2】:

如果你想使用 TintColor 作为标题颜色,类型应该是System 而不是Custom

【讨论】:

谢谢!我知道这应该是一些可笑的事情。【参考方案3】:

您可以直接更改其标题,如:

let button = UIButton()
button.titleLabel?.textColor = .red

【讨论】:

它也不起作用。我手动创建了 UIButton。我只需要以编程方式更改它的 text-color 属性。

以上是关于为啥我无法更改 UIButton 文本颜色?的主要内容,如果未能解决你的问题,请参考以下文章

通过触摸按钮 Swift 3 更改 UIButton 文本标签颜色

在 Swift (tvOS) 中,如何更改 UIButton 的突出显示和焦点颜色?

在 UITableView 中单击时更改 UIButton 颜色和文本

iOS:自定义按钮(UIButton 的子类) - 无法更改边框属性

带有分隔线的Objective C UIButton并在选择时更改文本颜色

UIButton 中的标题标签文本颜色无法正确设置动画