我正在尝试使用KVO模式观察UIButton标题的变化。viewDidLoad
中添加了观察者。
@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
方法。我做错了什么?
答案 0 :(得分:0)
您的添加观察者代码不正确,它应该像
KVOBTn.titleLabel!.addObserver(self, forKeyPath: "text", options: [.New, .Old] , context: nil)
请注意,关键路径为"text"
而不是"btntest"
。 UILabel凹痕具有关键路径"btntest"
另外,请不要忘记在observeValueForKeyPath
方法
<强>更新强>
这forKeyPath: "text"
真的很重要。这意味着您正在观察按钮标题标签的属性text
的更改。如果要观察标签文本颜色的变化,关键路径应为textColor
更新2
我不建议将KVO与UI工具包元素一起使用。 KVO通常用于观察模型对象的变化。请不要误入歧途。
答案 1 :(得分:0)