Détecter l'événement tactile sur UIScrollView AND sur les composants de UIView [qui est placé dans UIScrollView]
J'ai UIViewController sur mon simple storyboard IPad projet qui contient UIScrollView qui est placé sur toute la surface (1024 x 768). J'ai créé 3 XIB fichiers qui sont UIViews qui ma demande de charges sur démarrer dans le viewDidLoad et les ajouter dans UIScrollView. Chacun de ces 3 fichiers XIB ne contient qu'une seule UIButton.
C'est la hiérarchie:
~ UIViewController (UIViewControllerClass est de classe pour cette
UIViewController)~~ UIScrollView (contient 3 identiques UIViews)
~~~ UIView (UIViewClass est Propriétaire du Fichier de ce fichier XIB)
~~~~ UIButton
Je voudrais que mon UIViewControllerClass prend conscience à la fois: appuyez n'importe où sur UIScrollView composant, ET si UIScrollView est touché, si UIButton à l'intérieur de UIView dans UIScrollView est touché, d'avoir des informations que exactement ce bouton est touché.
J'ai fait IBAction à l'intérieur de UIViewClass pour toucher sur UIButton à l'intérieur de UIView dans UIScrollView et quand je l'Interaction de l'Utilisateur Enabled = YES sur tous les éléments (UIViewController, UIView et UIScrollView) cette méthode est appelée comme il se doit.
Mais à ce point, mon UIViewControllerClass n'est pas au courant que le toucher s'est produite à l'intérieur de UIScrollView sur que UIButton. J'ai fait toucher de reconnaissance comme ceci:
UITapGestureRecognizer *touch = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTouch)];
touch.numberOfTouchesRequired = 1;
et de l'ajouter à UIScrollView composant. De cette façon, je suis en mesure de détecter le toucher de l'événement sur UIScrollView composant dans UIViewControllerClass, mais touchez gestionnaire d'événement pour UIButton dans UIView qui est à l'intérieur de UIScrollView n'est pas appelé plus.
Donc, j'ai besoin d'avoir ces deux informations dans UIViewControllerClass:
- Touch sur UIScrollView composant a été faite
- Touch sur UIButton dans UIView qui est à l'intérieur de UIScrollView (si ce bouton est touché) a été faite
Je suppose que la fixation d'événement tactile de reconnaissance à l'ensemble de la UIScrollView composant n'est pas la solution, car il désactive tous les gestionnaires d'événements, j'ai écrit à l'intérieur de UIViewClass.
Je pense que la solution est que d'une certaine façon touches qui sont faites sur les composants de UIView à l'intérieur de UIScrollView doivent être envoyés jusqu'à UIViewControllerClass, mais je n'ai pas trouvé le moyen de le faire.
Si quelqu'un peut m'aider, je lui en serais très reconnaissant. Merci à l'avance.
[edit #1: RÉPONSE par Zheng]
Appuyez sur le geste doit avoir cancelsTouchesInView option PAS!
Pour mon cas ci-dessus, cette ligne résout tout:
touch.cancelsTouchesInView = NO;
Merci beaucoup pour Zheng.
source d'informationauteur uerceg
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas si cela fonctionne pour vous ou pas, mais je vous ai donné une réponse concernant les événements tactiles pour les vues à l'intérieur de scrollview ici:
Rejetant le clavier dans une UIScrollView
L'idée est de raconter la scrollView de ne pas avaler toutes appuyant avec les doigts à l'intérieur de défilement de la zone d'affichage.
Je vais coller le code ici, de toute façon, j'espère que ça résout votre problème:
Vous pouvez sous-classe votre UIScrollView et remplacer la méthode
- hitTest:withEvent:
qui est appelée par le système pour déterminer la vue qui gérera l'événement. Chaque fois qu'il est appelé, vous pouvez supposer que un événement tactile s'est produite à l'intérieur de défilement de la vue, et par l'appel de la super mise en œuvre, vous pouvez obtenir le point de vue qui serait normalement processus de l'événement.vous pouvez capturer n'importe quel type de gestes dans le UIscrollView. Assurez-vous aussi de traiter certaines propriétés par défaut en tant que bien comme jeu cancelsTouchesInView valeur false à la propriété, il est vrai par défaut. Aussi donner une certaine étiquette npn votre sous-vues à distinguer dans les sélecteurs. & aussi permettre leur interaction avec l'Utilisateur pour vrai.