UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTapTap:)];
[self.view1 addGestureRecognizer:tapGesture];
[self.view2 addGestureRecognizer:tapGesture];
[tapGesture release];
Im obigen Code werden nur Anschläge view2
erkannt. Wenn ich die dritte Zeile auskommentiere, view1
werden Abgriffe erkannt. Wenn ich recht habe und Sie einen Gestenerkenner nur einmal verwenden können, bin ich mir nicht sicher, ob dies ein Fehler ist oder nur weitere Dokumentation benötigt.
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didPressed:)]; [self.view1 addGestureRecognizer:tapRecognizer]; [self.view2 addGestureRecognizer:tapRecognizer];
Die Ausgabeansicht1 verfügt über kein Gestenerkennungsarray. view2 hat ein Gestenerkennungs-ArrayIch habe es umgangen, indem ich das Folgende verwendet habe.
Dann habe ich in meiner handleLongPress-Methode einfach einen UIButton gesetzt, der der Ansicht des Gestenerkenners entspricht, und verzweige, was ich basierend auf dieser Schaltfläche mache
quelle
Für Swift 3, falls jemand dies benötigt: Basierend auf der obigen Antwort von Bhavik Rathod.
quelle
getGestureRecognize
weil das ist, was diese Funktion tutWir können so etwas tun, es ist einfach und unkompliziert
1) Erstellen Sie eine Funktion wie unten in Ihrem Controller (diese Funktion gibt GestureRecognizer zurück).
2) Stellen Sie diesen Erkenner nun in mehreren Ansichten ein
quelle
setNumberOfTapsRequired:1
ist nicht notwendigNein, Sie sollten Gestenerkenner nicht an mehr als eine Ansicht anhängen.
Diese expliziten Informationen finden Sie in der Apple-Dokumentation:
Handbuch zur Ereignisbehandlung für iOS - Gestenerkenner Apple Developer Library
Während andere erwähnen, dass sie in einigen Fällen möglicherweise funktionieren, ist dies eindeutig gegen die Dokumentation und kann sich in jeder zukünftigen iOS-Version ändern.
Sie können den Ansichten, die Sie überwachen möchten, separate Gestenerkenner hinzufügen, die eine gemeinsame Aktion verwenden können.
quelle
Nun, wenn jemand nicht codieren möchte, um eine Gestenansicht für mehrere Schaltflächen hinzuzufügen, wie kwalker oben geantwortet hat, und dies über den Interface Builder tun möchte, kann dies hilfreich sein.
1) Sie können Long Press Geste Recognizer aus der Objektbibliothek hinzufügen, wie Sie andere Objekte wie UIButtons und UILabels hinzufügen.
Am Anfang habe ich nur einen genommen
2) Setzen Sie Referenzierungssteckdosen auf
UIButton
und senden Sie Aktionen mit dem Eigentümer der Datei.quelle
Wenn Sie eine feste Ansicht haben, empfehle ich Ihnen, so etwas zu tun
Auf diese Weise werden mehrere verschiedene nutzlose Variablen reduziert
quelle
Sie können eine generische Erweiterung in der Ansicht erstellen, um Gestenerkenner einfach hinzuzufügen. Dies ist nur ein Beispiel, aber es könnte so aussehen
Um einer Ansicht einen 2-Tap-Erkenner hinzuzufügen, rufen Sie einfach Folgendes auf:
Sie können auch einfach einen Wischerkenner hinzufügen
und so weiter. Denken Sie daran, dass das Ziel mit dem Selektor verknüpft sein muss.
quelle
Klasse überschreiben durch '
<UIScrollViewDelegate>
'Und verwenden Sie diese Methode in der Klasse .m:
Mit dieser Methode können Sie mehrere Wischvorgänge in einer einzigen Ansicht aktivieren.
quelle
Wie wäre es, wenn Sie Ihre Geste neu schreiben (neu erstellen)? Jedes Mal, wenn Sie einen Gestenerkenner hinzufügen, der auf dieselbe Funktion verweist. Im folgenden Fall funktioniert es. Ich verwende IBOutletCollection
Swift 2:
quelle
Sie können dies mit diesem Code tun, meine Ansichten, die Bildansichten in der xib sind.
quelle
500
, alle Tags Ihrer Ansichten zu ergänzen und dann zu subtrahieren500
? Warum starten Sie Ihre Tags nicht einfach bei1
(oder sogar0
) statt501
?1
Ich habe diesen Code aus meiner App kopiert, von der ich ihn gebe501
. Aber ja, gib nicht0
bcoz, ich habe irgendwo gelesen, dass es immer die Ansicht der Eltern anzeigt, so dass es zu Komplikationen kommt. Glaub mir, ich habe mich dem gestellt.