如何正确添加键值观察器到我的按钮?

时间:2016-04-18 12:09:08

标签: ios swift swift2 key-value-observing

我有一个UITableViewCell文件,我在其中:

var followers: FollowersModel? {
    didSet { 
        self.followerButton.addObserver(self, forKeyPath: "followerButtonTapped", options: .New, context: &kvoContext)
    }
}

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
    print(keyPath)
}

其中

private var kvoContext = 0

所以,我想:当我点击那些Cell中的按钮时,它将从ViewController运行函数。但点击我的按钮不会打印任何内容。

这是我第一次与KVO合作,我做错了吗?

1 个答案:

答案 0 :(得分:1)

好吧,KVO并不像那样。 - addObserver:forKeyPath:options:context:的作用是注册观察者以在属性更改时接收KVO通知。在你的情况下,我认为“followerButtonTapped”不是属性。 Registering for observation

要处理按下的按钮,您需要像这样(或在IB中)添加目标:

cell.followerButton.addTarget(self, action: #selector(ViewController.onFollowerButtonTap(_:)), forControlEvents: .TouchUpInside)

并向视图控制器添加方法:

func onFollowerButtonTap(sender: UIButton) {

}

要获取此按钮的模型对象,您可以使用此扩展名:

extension UITableView {
    func indexPathForView(view: UIView) -> NSIndexPath? {
        let hitPoint = view.convertPoint(CGPoint.zero, toView: self)
        return indexPathForRowAtPoint(hitPoint)
    }
}