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

时间:2015-11-10 01:44:26

标签: ios swift uibutton

我有这个自定义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 个答案:

答案 0 :(得分:0)

尝试这样的事情

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

确保您有按钮的IBOutlet并将此代码放入viewDidLoad()

如果这适合你,请给+1!