2016-04-18 23 views
1

我有一个UITableViewCell文件,它里面我做的:如何正确添加Key-Value Observer到我的按钮?

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 

所以,我想:当我在这些细胞按一下按钮,它会运行从功能视图控制器。但点击我的按钮不会打印任何东西。

这是我第一次与KVO,我做错了什么?

回答

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) 
    } 
} 
相关问题