UIButton在swift中以不同的状态更改边框颜色

时间:2015-05-25 13:30:22

标签: ios swift uibutton

我正在向extension添加UIButton,以便在disabled/enabled

时更改边框颜色
extension UIButton {
    override public var enabled: Bool {
        didSet {
            if enabled {
                changeBorderColorForEnabled()
            } else {
                changeBorderColorForDisabled()
            }
        }
    }
}

问题是 有时 边框颜色会改变,但标题颜色不会改变。

具体来说,它发生变化太快,如下面的代码片段,当它执行行//==== 1. =====////==== 2. =====//

       // Enabled by default
        self.priceButton.enabled = true   //==== 1. =====//

        if bought {
            self.priceButton.setTitle("bought", forState: UIControlState.Normal)
        } else {
            if let price = self.product?.price {
                self.priceButton.setTitle("Buy for \(price)", forState: UIControlState.Normal)
            } else {

                // Disable if price hasn't been retrieved
                self.priceButton.enabled = false   //==== 2. =====//
            }
        }

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我猜这个问题是由于干扰了UIButton对setEnabled:的响应,你正在绘制按钮试图绘制的同时 - 这是搞乱按钮试图画画。

我要尝试的第一件事就是添加一个短暂的延迟,让按钮有机会先做自己的绘图(对于delay,请参阅https://stackoverflow.com/a/24318861/341994):

    didSet {
        delay(0.1) {
            if enabled {
                changeBorderColorForEnabled()
            } else {
                changeBorderColorForDisabled()
            }
        }
    }