Question

J'ai une sous-classe UIView ( CustomView pour les besoins de cette question) qui gère elle-même tous les événements touch (Début, Déplacé, Terminé, Annulé). J'ai aussi un UIButton qui est un frère de CustomView qui le chevauche.

Par exemple, ma hiérarchie de vues se présente comme suit:

  • UIView (vue du contrôleur)
    • CustomView avec cadre (0, 0, 300, 300)
    • UIButton avec cadre (0, 0, 100, 50)

J'aimerais que CustomView capture les événements tactiles une fois que l'utilisateur a fait glisser le curseur hors du bouton UIB. Lors de la journalisation du débogage, il apparaît que l'événement UIControlEventTouchDragExit est celui à intercepter (bien qu'il ne se déclenche que lorsque le contact est à environ 100 pixels du bouton, mais ce n'est pas important pour cette question) .

Idéalement, lorsque l'événement de fin de glisser est déclenché, le bouton cesse de recevoir des événements de déplacement tactile, le CustomView génère un événement touchesBegan (même si je dois en simuler un moi-même), et tous les événements tactiles futurs ( touchesMoved , etc.) seront envoyés à CustomView.

J'ai essayé ce qui suit et cela n'a aucun effet:

-(void)btnTouchDragExit:(id)sender
{
    UIButton * btn = sender;
    [btn resignFirstResponder];
    [customView becomeFirstResponder];
}

Je pense que l'objet UITouch sous-jacent (cohérent pour tous les événements tactiles) n'est pas reciblé de manière à pointer vers le CustomView. Comment puis-je obtenir l'effet souhaité?

Était-ce utile?

La solution

Utilisez simplement hitTest: withEvent: pour déterminer quelle vue "devrait". recevoir l'événement, puis le transférer à la vue appropriée. Vous devrez peut-être danser un peu pour intercepter les événements avant qu’ils ne se rendent au bouton, mais c’est pour cela que hitTest: withEvent: a été conçu.

Autres conseils

vous devez remplacer canBecomeFirstResponder pour retourner YES sinon devenirFirstResponder ne fait rien. Ceci est déjà fait sur UIControl s, mais pas sur UIView s

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top