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?

Était-ce utile?

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.

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