Comment détecter « Touch Down » dans superview de UIScrollView?
-
25-09-2019 - |
Question
J'ai un UIView
qui contient un UIScrollView
et je veux être en mesure de capturer l'événement « Touch Down » dans le UIView
chaque fois que l'utilisateur tape sur le UIScrollView
.
Je l'ai essayé, y compris tous les touchesBegan / gestionnaires / Ended dans mon Cancelled UIViewController
, mais aucun d'entre eux viré lorsque vous touchez à l'intérieur du UIScrollView
contenu dans le UIView
principal.
Quelle est la meilleure façon d'y parvenir?
La solution
Dans le UIView, mettre en œuvre touchesBegan:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// assign a UITouch object to the current touch
UITouch *touch = [[event allTouches] anyObject];
// if the view in which the touch is found is myScrollView
// (assuming myScrollView is the UIScrollView and is a subview of the UIView)
if ([touch view] == myScrollView) {
// do stuff here
}
}
Une note de côté: assurez-vous que userInteractionEnabled est réglé sur OUI dans le UIView
.Autres conseils
Vous pouvez également implémenter hitTest:withEvent:
dans votre sous-classe UIView. Cette méthode est appelée à déterminer qui devrait recevoir sous-vue événement tactile. Alors là, vous pouvez suivre tous les événements juste en passant par votre point de vue ou pas cacher certains des événements de subviews. Dans ce cas, vous ne pouvez pas besoin de désactiver l'interaction utilisateur pour votre scrollview.
Voir plus de détails sur cette méthode en référence de classe UIView
.
Vous pouvez également ajouter un geste de reconnaissance à votre superview. Par exemple, un geste du robinet si vous avez besoin d'activer / désactiver les choses comme les boutons superposant la vue de défilement:
self.tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)] autorelease];
tap.numberOfTapsRequired = 1;
["containerView" addGestureRecognizer:tap];
Gestures font préserver l'interaction de vue de défilement
Vous devez désactiver l'interaction utilisateur avec la vue de défilement en tant que telle ...
scrollView.userInteractionEnabled = NO;
Une fois désactivé, le superview du UIScrollView obtient l'événement touchesBegan.