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