更改自定义 UIButton 的 TitleColor (iOS 8 + swift)

Posted

技术标签:

【中文标题】更改自定义 UIButton 的 TitleColor (iOS 8 + swift)【英文标题】:Change TitleColor for custom UIButton (iOS 8 + swift) 【发布时间】:2015-11-10 01:44:25 【问题描述】:

我有这个自定义 UIButton 类,但我无法更改不同状态(正常、禁用、突出显示)的 titleColor。我已经尝试使用titleColorForState 来更改它,但它没有效果。唯一似乎有效的是tintColor,但在不同的状态下,颜色只会褪色并且不会改变。

这是我的自定义类的代码:

import UIKit

class UIDefaultButton: UIButton 

    var normalBackground: UIColor  get  return UIColor.hrColors().whiteColor()  
    var highlightedBackground: UIColor  get  return UIColor.hrColors().lightGreyColor()  
    var disabledBackground: UIColor  get  return UIColor.hrColors().lightGreyColor()  

    var normalTextColor: UIColor  get  return UIColor.hrColors().darkGreyColor()  
    var highlightedTextColor: UIColor  get  return UIColor.hrColors().darkGreyColor() 
    var disabledTextColor: UIColor  get  return UIColor.hrColors().greyColor()  

    var cornerRadius: CGFloat  get  return 5.0  
    var borderWidth: CGFloat  get  return 1.0  
    var borderColor: UIColor  get  return UIColor.hrColors().greyColor()  
    var hasBorder: Bool  get  return true  

    override var highlighted: Bool 
        didSet 
            switch (highlighted) 
            case true:
                backgroundColor = highlightedBackground
            case false:
                backgroundColor = normalBackground
            
        
    

    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)

        self.layer.cornerRadius = cornerRadius

        if (self.hasBorder) 
            self.layer.borderColor = borderColor.CGColor
            self.layer.borderWidth = borderWidth
        

        self.tintColor = normalTextColor
        self.backgroundColor = normalBackground
    

    override func titleColorForState(state: UIControlState) -> UIColor? 
        switch (state) 
            case UIControlState.Normal:
                return normalTextColor
            case UIControlState.Highlighted:
                return highlightedTextColor
            case UIControlState.Disabled:
                return disabledTextColor
            default:
                return normalTextColor
        
    


注意:UIColor.hrColor() 是我自己的自定义颜色扩展

知道为什么它不起作用吗?

【问题讨论】:

【参考方案1】:

试试这样的

yourButton.setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.hrColor()], forState: .Normal)

确保您有一个按钮的 IBOutlet 并将此代码放在 viewDidLoad() 中

如果这对你有用,请给 +1!

【讨论】:

我需要它在自定义类中。否则我必须为每个视图中的每个按钮都这样做。 @shikhar.ja 是正确的。这是唯一的方法。这就是我所做的。不需要很长时间......只是一些复制和粘贴。您是否也介意看看发布的问题,看看您是否知道如何解决它? 我仍然想找出一个通用的方法来做到这一点,所以我暂时把这个问题放在一边。一旦我弄清楚了,我会回来告诉你我的解决方案。

以上是关于更改自定义 UIButton 的 TitleColor (iOS 8 + swift)的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 在自定义单元格中更改

如何动态更改自定义 UIButton 图像

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

如何更改自定义 UIButton 的边框宽度

更改自定义 UIButton 的 TitleColor (iOS 8 + swift)

UIButton自定义按钮不会在选择时更改字体颜色