删除UIButton上的禁用色调

时间:2017-03-01 05:43:16

标签: ios objective-c swift uibutton

我已经实现了自己的自定义按钮,效果很好。

import Foundation
import UIKit

class GhostYouButton: UIButton {
    required public init?(coder aDecoder: NSCoder) {

        super.init(coder: aDecoder)
    }

    override var isEnabled: Bool {
        didSet {
            if (self.isEnabled == false) {
                self.backgroundColor = UIColor.clear
                self.titleLabel?.textColor = Constant.disabledGrayColor
                self.tintColor = Constant.disabledGrayColor
                self.borderColor = Constant.disabledGrayColor
                self.borderWidth = 2
                self.cornerRadius = 20
            } else {
                self.backgroundColor = UIColor.clear
                self.titleLabel?.textColor = Constant.mainGreenColor
                self.tintColor = Constant.mainGreenColor
                self.borderColor = Constant.mainGreenColor
                self.borderWidth = 2
                self.cornerRadius = 20
            }
        }
    }
}

我将我的GhostYouButton设置为在viewDidLoad()中禁用:

override func viewDidLoad() {
    self.nextButton.isEnabled = false
}

所以它变成了灰色,就像我期望的那样:

enter image description here

然而......正如你所看到的,UIButton上的标题已经淡出。我想这是与边框完全相同的颜色。我该如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

使用此行

   if (self.isEnabled == false){
    :
     self.setTitleColor(UIColor.gray, for: .normal)
    :
   }
  else{
    :
     self.setTitleColor(UIColor.green, for: . disabled)
    :
   }

答案 1 :(得分:0)

现在,您似乎直接设置标签的标题颜色。虽然这很有效,但是当使用UIButton时,它不是设置标题颜色的最佳方式(因为您遇到),此属性可能会根据按钮的状态而改变。相反,您应该使用UIButton的setTitleColor:forState:方法,当按钮阶段发生变化时,您可以更精细地控制按钮的样式和外观:https://developer.apple.com/reference/uikit/uibutton/1623993-settitlecolor?language=swift

使用此方法,您可以传入控制状态,例如禁用,突出显示等:https://developer.apple.com/reference/uikit/uicontrolstate