Swift 3.0:按下后更改按钮颜色

时间:2016-08-13 23:02:36

标签: ios swift uibutton

我创建了一个圆形的绿色按钮。这是 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()

    }
}

这是屏幕截图。

enter image description here

在按下的按钮上,我想将其颜色更改为红色。我已将该功能定义如下:

@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

在上面的功能中,按钮颜色变为红色。

感谢您的帮助。

1 个答案:

答案 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()
        }
    }
}