我有一个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合作,我做错了吗?
答案 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)
}
}