Wykryj zdarzenie dotykowe na UIScrollView ORAZ na komponentach UIView [które są umieszczone wewnątrz UIScrollView]

Mam UIViewController na moim prostym projekcie IPad storyboardu, który zawiera UIScrollView, który jest umieszczony na całej powierzchni (1024 x 768). Stworzyłem 3 pliki XIB, które są UIViews, które moja aplikacja ładuje na starcie w viewDidLoad i dodaje je do UIScrollView. Każdy z tych 3 plików XIB zawiera tylko jeden UIButton.

To jest hierarchia:

~ UIViewController (UIViewControllerClass jest klasą dla tego kontrolera UIViewController)

~~ UIScrollView (zawiera 3 identyczne UIViews)

~~~ UIView (UIViewClass jest właścicielem pliku dla tego pliku XIB)

~~~~ UIButton

Chciałbym, aby moja UIViewControllerClass dowiedziała się o obu: dotknij w dowolnym miejscu na komponencie UIScrollView ORAZ jeśli dotknięto UIScrollView, jeśli dotknięto UIButton wewnątrz UIView w UIScrollView, aby uzyskać informacje, że dokładnie ten przycisk jest dotknięty.

Zrobiłem IBAction wewnątrz UIViewClass dla dotyku na UIButton wewnątrz UIView w UIScrollView i kiedy ustawię Interakcję użytkownika Enabled = TAK na wszystkich elementach (UIViewController, UIView i UIScrollView) ta metoda jest wywoływana tak, jak powinna.

Ale w tym momencie moja UIViewControllerClass nie wie, że dotyk wystąpił wewnątrz UIScrollView na tym UIButton. Wykonałem rozpoznawanie dotykowe w ten sposób:

UITapGestureRecognizer *touch = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTouch)];
touch.numberOfTouchesRequired = 1;

i dodał go do komponentu UIScrollView. W ten sposób jestem w stanie wykryć zdarzenie dotyku na komponencie UIScrollView w UIViewControllerClass, ale program obsługi zdarzeń dotyku dla UIButton w UIView, który jest wewnątrz UIScrollView, nie jest już wywoływany.

Tak więc muszę mieć te dwie informacje w UIViewControllerClass:

Dotknięto komponentu UIScrollViewDotknij UIButton w UIView, który znajduje się wewnątrz UIScrollView (jeśli ten przycisk został dotknięty) został wykonany

Przypuszczam, że dołączenie rozpoznawania zdarzeń dotyku do całego komponentu UIScrollView nie jest rozwiązaniem, ponieważ wyłącza wszystkie procedury obsługi zdarzeń dotyku, które napisałem w UIViewClass.

Myślę, że rozwiązanie polega na tym, że w jakiś sposób dotykane są komponenty w UIView wewnątrz UIScrollView powinny być wysyłane do UIViewControllerClass, ale nie znalazłem sposobu, aby to zrobić.

Gdyby ktoś mógł mi pomóc, byłbym bardzo wdzięczny. Z góry dziękuję.

[edit # 1: ANSWER by Zheng]

Dotknij gest musi miećanuluje TouchesInView opcja ustawiona naNIE!

W moim przypadku powyżej ta linia rozwiązuje wszystko:

touch.cancelsTouchesInView = NO;

Wielkie dzięki dla Zhenga.

questionAnswers(3)

yourAnswerToTheQuestion