如何使用 属性 上的 didSet 更改 UIView 的背景颜色?
How to change backgroundColor of UIView with didSet on a property?
我有一个 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
...等等我的背景颜色永远不会更新。
不明白为什么最后一个didSet是"lock"。应该是 "unlock" 不?
我想这就是我的背景颜色没有更新的原因。
class DeviceView: UIView {
var state:State? {
didSet(newValue) {
print("PRINT didSet \(newValue)")
switch newValue {
case .unlock:
self.backgroundColor = green
}
self.setNeedsDisplay()
}
这样试试。
您不需要将参数传递给 didSet 。状态本身已经是 didSet 中的新参数,所以你可以用这个更改 didSet 代码块;
didSet {
print("PRINT didSet \(state)")
switch state {
case .unlock:
self.backgroundColor = green
}
self.setNeedsDisplay()
}
我有一个 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
...等等我的背景颜色永远不会更新。
不明白为什么最后一个didSet是"lock"。应该是 "unlock" 不? 我想这就是我的背景颜色没有更新的原因。
class DeviceView: UIView {
var state:State? {
didSet(newValue) {
print("PRINT didSet \(newValue)")
switch newValue {
case .unlock:
self.backgroundColor = green
}
self.setNeedsDisplay()
}
这样试试。
您不需要将参数传递给 didSet 。状态本身已经是 didSet 中的新参数,所以你可以用这个更改 didSet 代码块;
didSet {
print("PRINT didSet \(state)")
switch state {
case .unlock:
self.backgroundColor = green
}
self.setNeedsDisplay()
}