
@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子类并根据变量更改颜色所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)