2016-04-18 2 views
1

J'ai un fichier UITableViewCell et à l'intérieur de celui-ci que je fais:Comment ajouter correctement Key-Value Observer à mon bouton?

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 

Alors, je veux: Lorsque je clique sur le bouton dans les cellules, il courra la fonction de la ViewController. Mais en cliquant sur mon bouton ne imprime rien.

C'est la première fois que je fais du KVO, est-ce que je fais quelque chose de mal?

Répondre

1

Eh bien, KVO ne fonctionne pas comme ça. Qu'est-ce que - addObserver:forKeyPath:options:context: fait est observateur de registre pour recevoir des notifications de KVO lorsque la propriété a changé. Dans votre cas, je suppose que "followerButtonTapped" n'est pas une propriété. Registering for observation

Pour gérer le bouton tapoté vous devez ajouter la cible comme celui-ci (ou IB):

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

Et méthode ajouter à votre contrôleur de vue:

func onFollowerButtonTap(sender: UIButton) { 

} 

Pour obtenir l'objet modèle pour ce bouton vous pouvez utiliser cette extension:

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