Berührungsereignis in UIScrollView UND in den Komponenten von UIView erkennen [wird in UIScrollView platziert]

Ich habe UIViewController in meinem einfachen Storyboard-IPad-Projekt, das UIScrollView enthält, das über die gesamte Oberfläche (1024 x 768) platziert ist. Ich habe 3 XIB-Dateien erstellt, die UIViews sind, die meine Anwendung beim Start in viewDidLoad lädt, und sie in UIScrollView hinzugefügt. Jede dieser 3 XIB-Dateien enthält nur einen UIButton.

Das ist Hierarchie:

~ UIViewController (UIViewControllerClass ist Klasse für diesen UIViewController)

~~ UIScrollView (enthält 3 identische UIViews)

~~~ UIView (UIViewClass ist der Besitzer der Datei für diese XIB-Datei

~~~~ UIButton

Ich möchte, dass meine UIViewControllerClass beides erkennt: Berühren Sie eine beliebige Stelle auf der UIScrollView-Komponente UND, wenn UIScrollView berührt wird, wenn UIButton in UIView in UIScrollView berührt wird, um zu erfahren, dass genau diese Schaltfläche berührt wird.

Ich habe IBAction in UIViewClass erstellt, um UIButton in UIView in UIScrollView zu berühren. Wenn ich für alle Elemente (UIViewController, UIView und UIScrollView) User Interaction Enabled = YES festgelegt habe, wird diese Methode wie gewünscht aufgerufen.

Zu diesem Zeitpunkt ist meiner UIViewControllerClass jedoch nicht bekannt, dass in UIScrollView auf diesem UIButton eine Berührung aufgetreten ist. Ich habe Touch Recognizer so gemacht:

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

und fügte es der UIScrollView-Komponente hinzu. Auf diese Weise kann ich ein Berührungsereignis in der UIScrollView-Komponente in UIViewControllerClass erkennen, aber der Berührungsereignis-Handler für UIButton in UIView, der sich in UIScrollView befindet, wird nicht mehr aufgerufen.

Also, ich brauche diese zwei Informationen in UIViewControllerClass:

Berühren Sie die UIScrollView-Komponente wurde vorgenommenBerühren Sie UIButton in UIView, das sich in UIScrollView befindet (wenn diese Schaltfläche berührt wurde)

Ich nehme an, dass das Anhängen der Berührungsereigniserkennung an die gesamte UIScrollView-Komponente keine Lösung ist, da alle in UIViewClass geschriebenen Berührungsereignishandler deaktiviert werden.

Ich denke, die Lösung ist, dass Berührungen, die an Komponenten in UIView in UIScrollView vorgenommen werden, an UIViewControllerClass gesendet werden sollten, aber ich habe keine Möglichkeit gefunden, dies zu tun.

Wenn mir jemand helfen kann, wäre ich sehr dankbar. Danke im Voraus.

[edit # 1: ANTWORT von Zheng]

Tippgeste muss habencancelsTouchesInView Option eingestellt aufNEIN!

Für meinen obigen Fall löst diese Zeile alles:

touch.cancelsTouchesInView = NO;

Vielen Dank an Zheng.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage