在 UIButton-SWIFT 中实施 KVO 模式
Implement KVO pattern in UIButton-SWIFT
我正在尝试使用 viewDidLoad
中的 KVO pattern.Added 观察器观察 UIButton 标题的变化。
@IBOutlet weak var KVOBTn: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
KVOBTn.titleLabel!.addObserver(self, forKeyPath: "btntest", options: NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Old , context: nil)
}
这是监听标题是否有变化的方法
override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
if keyPath == "btntest"{
KVOBTn.backgroundColor = UIColor.greenColor()
}
}
我已经通过另一个按钮操作更改了按钮标题
@IBAction func changeTitle(sender: AnyObject) {
KVOBTn.setTitle("testAgain", forState: UIControlState.Normal)
}
问题是 observeValueForKeyPath
方法永远不会 called.What 我做错了吗?
你添加观察者的代码不对,应该是这样的
KVOBTn.titleLabel!.addObserver(self, forKeyPath: "text", options: [.New, .Old] , context: nil)
请注意关键路径是 "text"
而不是 "btntest"
。 UI标签凹痕有一个关键路径"btntest"
另外别忘了更改 observeValueForKeyPath
方法
的签到
更新
这个forKeyPath: "text"
真的很重要。这意味着您正在观察按钮标题标签的 属性 text
的变化。如果要观察标签文字颜色的变化,关键路径应该是textColor
更新 2
我不建议将 KVO 与 UI 套件元素一起使用。 KVO 通常用于观察模型的变化 objects。请不要打扰。
UIButton
不符合密钥 "title".
的 KVO
None Apple 提供的框架对象应该与 KVO 一起使用,除非另有说明(参见 here, here or here)。它可能在某些情况下有效,但它是脆弱且糟糕的代码。
您必须使用其他方式对标签更改做出反应。
我正在尝试使用 viewDidLoad
中的 KVO pattern.Added 观察器观察 UIButton 标题的变化。
@IBOutlet weak var KVOBTn: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
KVOBTn.titleLabel!.addObserver(self, forKeyPath: "btntest", options: NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Old , context: nil)
}
这是监听标题是否有变化的方法
override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
if keyPath == "btntest"{
KVOBTn.backgroundColor = UIColor.greenColor()
}
}
我已经通过另一个按钮操作更改了按钮标题
@IBAction func changeTitle(sender: AnyObject) {
KVOBTn.setTitle("testAgain", forState: UIControlState.Normal)
}
问题是 observeValueForKeyPath
方法永远不会 called.What 我做错了吗?
你添加观察者的代码不对,应该是这样的
KVOBTn.titleLabel!.addObserver(self, forKeyPath: "text", options: [.New, .Old] , context: nil)
请注意关键路径是 "text"
而不是 "btntest"
。 UI标签凹痕有一个关键路径"btntest"
另外别忘了更改 observeValueForKeyPath
方法
更新
这个forKeyPath: "text"
真的很重要。这意味着您正在观察按钮标题标签的 属性 text
的变化。如果要观察标签文字颜色的变化,关键路径应该是textColor
更新 2
我不建议将 KVO 与 UI 套件元素一起使用。 KVO 通常用于观察模型的变化 objects。请不要打扰。
UIButton
不符合密钥 "title".
None Apple 提供的框架对象应该与 KVO 一起使用,除非另有说明(参见 here, here or here)。它可能在某些情况下有效,但它是脆弱且糟糕的代码。
您必须使用其他方式对标签更改做出反应。