J'essaye de créer une sous-classe de UIControl et de toucher des pistes pour changer l'apparence du contrôle. Je ne sais pas pourquoi mais si j'ajoute l'action (pour .TouchUpInside) de IB ou du code, quand je touche le contrôle la méthode d'action de registre est appelée deux fois.
La trace de la pile me dit que le premier appel vient de _sendActionsForEvents:withEvent:
, le second n'est pas clair.
Ici comment je méthodes de piste: OPPOSER
UIControl personnalisé, action appelée deux fois
override func continueTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool {
let touchPoint = touch.locationInView(self)
if CGRectContainsPoint(bounds, touchPoint) {
sendActionsForControlEvents(.TouchDragInside)
}
else {
sendActionsForControlEvents(.TouchDragOutside)
}
return true
}
override func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool {
sendActionsForControlEvents(.TouchDown)
return true
}
override func endTrackingWithTouch(touch: UITouch?, withEvent event: UIEvent?) {
guard let tou = touch else { return }
let touchPoint = tou.locationInView(self)
if CGRectContainsPoint(bounds, touchPoint) {
sendActionsForControlEvents(.TouchUpInside)
}
else {
sendActionsForControlEvents(.TouchUpOutside)
}
}
override func cancelTrackingWithEvent(event: UIEvent?) {
sendActionsForControlEvents(.TouchCancel)
}
J'ai trouvé aussi ce answer mais il ne semble pas correspondre à mon problème, parce que quand j'ajoute la cible pour l'événement .TouchUpInside I don N'obtenez aucune action automatiquement du répartiteur d'événements comme indiqué dans cette réponse.
Avez-vous mis des points d'arrêt sur chacun des sendActionsForControlEvents et voir si plus de 1 est touché? Recevez-vous un événement tiré une fois pour le TouchDown et une fois pour le TouchUpInside? – fsb
Bien sûr, je suppose que j'ai trouvé la réponse. Je posterai plus tard. Fondamentalement, il semble que les actions sont déjà envoyées par superclasse, mais je veux traquer si tous les événements ou seulement quelques-uns. Donc j'envoie quelque chose qui est déjà envoyé – Andrea