2016-04-18 2 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 

だから、私が欲しい

:私はそれらのセル内のボタンをクリックすると、それから関数を実行しますViewController。しかし、私のボタンをクリックしても何も印刷されません。

KVOで初めてのことですが、何か間違っていますか?

答えて

1

さて、KVOはそのようには機能しません。 - addObserver:forKeyPath:options:context:は、プロパティが変更されたときにKVO通知を受け取るための登録オブザーバです。あなたの場合、私は "followerButtonTapped"はプロパティではないと思います。

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

そして、あなたのビューコントローラにメソッドを追加します:

func onFollowerButtonTap(sender: UIButton) { 

} 

のためのモデルオブジェクトを取得するには、この(またはIB中)のようにターゲットを追加する必要がタップボタンを処理するためにRegistering for observation

このボタンでは次の拡張機能を使用できます:

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