我有一個用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