我有一个用enum定义的不同状态的UIView。 当我改变状态时,我想更新它的backgroundColor属性。 它不起作用。如何使用didSet更改属性上UIView的backgroundColor?
enum State {
case lock
case unlock
case done
}
@IBDesignable
class DeviceView: UIView {
var state:State = .lock {
didSet(newValue) {
print("PRINT didSet \(newValue)")
switch newValue {
case .unlock:
self.backgroundColor = green
}
self.setNeedsDisplay()
}
}
func initDevice(type:Type) {
self.state = state
}
在viewDidLoad中我的视图控制器:
override func viewDidLoad() {
device1View.initDevice(state: .lock)
print("PRINT 1 \(device1View.state)")
}
在另一个地方之后,我需要改变我的DeviceView的状态
print("PRINT 2 \(device1View.state)")
device1View.state = .unlock
print("PRINT new 3 \(device1View.state)")
结果:
PRINT didSet lock
PRINT 1 lock
PRINT 2 lock
PRINT didSet lock <--- ???
PRINT new 3 done
...等等我的ba ckgroundColor从不更新。
我不明白为什么最后didSet是“锁定”。它应该是“解锁”否? 我认为这是为什么我的背景颜色没有更新的原因。
简单而有效,谢谢! – cmii