ios – Swift UIButton子类并根据变量更改颜色

ios – Swift UIButton子类并根据变量更改颜色,第1张

概述我正在为我的UIButton使用一个子类,它有一个名为isActive的变量.我需要根据该变量更改按钮边框颜色.此变量将以编程方式更改.请帮我解决一下这个. @IBDesignableclass buttonCTAOutlineDark: UIButton {override init(frame: CGRect) { super.init(frame: frame) com 我正在为我的UIbutton使用一个子类,它有一个名为isActive的变量.我需要根据该变量更改按钮边框颜色.此变量将以编程方式更改.请帮我解决一下这个.

@IBDesignableclass 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    }}}
解决方法 您的isActive属性写得不正确.它首先不应该是计算属性.目前,getter只会导致无限递归,而setter实际上并没有设置任何东西.

isActive属性应该是带有dIDSet属性observer的存储属性:

@IBInspectablevar isActive: Bool {    dIDSet {    }}

在dIDSet中,你可以放下commonInit的最后一部分.每次isActive更改时都不需要运行commonInit的第一部分.我建议你将其解压缩为一个名为updateborder的方法:

func updateborder(isActive: Bool) {    if (isActive) {        self.tintcolor = ACTIVE_color        self.layer.bordercolor = ACTIVE_color.cgcolor    } else {        self.tintcolor = nil        self.layer.bordercolor = UIcolor(red:0.69,Alpha:1.0).cgcolor    }}

然后在dIDSet中,您可以调用它:

updateborder(isActive: isActive)
总结

以上是内存溢出为你收集整理的ios – Swift UIButton子类并根据变量更改颜色全部内容,希望文章能够帮你解决ios – Swift UIButton子类并根据变量更改颜色所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1063682.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存