我创建了一个圆形的绿色按钮。这是 CircularButton.swift ,其中我定义了颜色和形状如下:
import UIKit
class CircularButton: UIButton {
@IBInspectable var fillColor: UIColor = UIColor.green
override func draw(_ rect: CGRect) {
let path = UIBezierPath(ovalIn: rect)
fillColor.setFill()
path.fill()
}
}
这是屏幕截图。
在按下的按钮上,我想将其颜色更改为红色。我已将该功能定义如下:
@IBAction func circularButtonPressed(_ sender: CircularButton) {
sender.fillColor = UIColor.red
sender.draw(CGRect(x: 0, y: 0, width: sender.frame.width,
height: sender.frame.height))
}
知道为什么颜色没有变成红色?
注意:如果我添加以下行:
sender.backgroundColor = UIColor.white
在上面的功能中,按钮颜色变为红色。
感谢您的帮助。
答案 0 :(得分:1)
您不应直接从代码中调用draw(_:)
。
你只需要告诉iOS需要重新绘制控件。
删除调用draw(_:)
的行:
@IBAction func circularButtonPressed(_ sender: CircularButton) {
sender.fillColor = UIColor.red
}
并将观察者添加到fillColor
属性:
@IBInspectable var fillColor: UIColor = UIColor.green {
didSet(oldColor) {
if fillColor != oldColor {
self.setNeedsDisplay()
}
}
}