我正在为我的UIButton使用一个子类,它有一个变量叫做isActive。我需要根据该变量更改按钮边框颜色。此变量将以编程方式更改。请帮我一下。
@IBDesignable
class buttonCTAOutlineDark: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
override func prepareForInterfaceBuilder() {
commonInit()
}
@IBInspectable var isActive: Bool {
get {
return self.isActive
}
set (active) {
if active {
commonInit(isActive: active)
}
}
}
func commonInit(isActive: Bool = false) {
self.backgroundColor = .clear
self.layer.cornerRadius = 4
self.layer.borderWidth = 1
if (isActive) {
self.tintColor = ACTIVE_COLOR
self.layer.borderColor = ACTIVE_COLOR.cgColor
} else {
self.tintColor = nil
self.layer.borderColor = UIColor(red:0.69, green:0.72, blue:0.77, alpha:1.0).cgColor
}
}
}
2条答案
按热度按时间h9vpoimq1#
您应该观察
didSet
以更新view
。在Swift
中,类型名应该以大写e开头。g ×ButtonCTAOutlineDark
。请看固定类gstyhher2#
您的
isActive
属性写入不正确。它首先不应该是计算属性。目前,getter只会导致无限递归,setter实际上并不设置任何东西。isActive
属性应该是具有didSet
属性观察器的存储属性:在
didSet
中,您可以只放置commonInit
的最后一部分。commonInit
的第一部分不需要在每次isActive
更改时运行。我建议你将其提取为一个名为updateBorder
的方法:然后在
didSet
中,你可以直接调用: