我一直在通过 self.layer.backgroundColor = someColor
设置按钮的背景颜色。
但是,这似乎不适用于自定义类?我有我使用的这个通用类:
class DarkButton: BaseButton {
override func layoutSubviews() {
super.layoutSubviews()
self.layer.cornerRadius = 5
self.setTitleColor(UIColor.black, for: .normal)
self.setTitleColor(UIColor.lightGray, for: .highlighted)
self.layer.backgroundColor = UIColor(red:0.77, green:0.77,
blue:0.77, alpha: 1.0).cgColor
self.clipsToBounds = false
}
}
self.layer.backgroundColor 工作得很好。现在,如果我像这样扩展它:
class SuperCoolButton: DarkButton {
required init() {
super.init()
self.setUp()
}
required init(spacing: Spacing) {
super.init(spacing: spacing)
self.setUp()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setUp()
}
func setUp() {
self.generateImage()
self.changeBGColor()
}
func generateImage() {
let image = UIImage(named: "logoSmall") as UIImage?
self.setImage(image, for: .normal)
self.imageEdgeInsets = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0)
self.imageView?.contentMode = .scaleAspectFit
}
func changeBGColor() {
self.layer.backgroundColor = UIColor.red.cgColor
}
}
backgroundColor 保持 DarkButton backgroundColor 的颜色,但是设置图像确实有效 >_>
最佳答案
发生这种情况是因为在 DarkButton
的 setUp
方法之后调用了在父类(super class) (DarkButton) 中实现的 layoutSubviews()
。您需要在类 SuperCoolButton
中重写 layoutSubviews 并在那里调用 setUp 而不是在其 init 方法中。
override func layoutSubviews() {
super.layoutSubviews()
setUp()
}
编辑:
我认为您应该移动在 DarkButton
类的 [layoutSubviews][1]
中编写的代码。
layoutSubviews
方法被多次调用,只有与 View 布局相关的代码应该在那里。
Subclasses can override this method as needed to perform more precise layout of their subviews. You should override this method only if the autoresizing and constraint-based behaviors of the subviews do not offer the behavior you want.
更改层的角半径和 setTitleColor 或背景颜色的理想位置是在自定义 View 的初始化处或 awakeFromNib
处:(仅当 View 始终在 nib 中设计时) .
因为您想稍后更改按钮的背景颜色。您可以简单地调用 SuperCoolButton
上的 changeBgColor 方法。早些时候它不起作用,因为 layoutSubviews
必须将背景颜色设置回默认值。
关于ios - 更改自定义 UIButton 的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47322281/