Ich versuche, UITapGestureRecognizers
einer Ansicht 2 hinzuzufügen , eine für Einzel- und eine für Doppel-Tap-Ereignisse. Der Single-Tap-Erkenner funktioniert wie erwartet (alleine). Aber ich scheine nicht in der Lage zu sein, den Doppelklick-Erkenner zum Laufen zu bringen.
Haben Sie versucht , mit Eigenschaften zu experimentieren wie: cancelsTouchesInView
, delaysTouchesBegan
und delaysTouchesEnded
doch immer noch nicht funktioniert.
Wenn ich zweimal tippe, wird immer die Einzelklopferkennung aktiviert und das Doppelklopfereignis wird auch an die Superansicht gesendet. Der benutzerdefinierte Doppelklick-Erkenner scheint jedoch überhaupt nicht benachrichtigt zu werden.
Dokumentationen scheinen darauf hinzudeuten, dass die 3 oben genannten Eigenschaften für diesen Zweck verwendet werden könnten. Ich bin mir aber nicht sicher, welche Werte eingestellt werden sollen und auf welchen Erkennern (einfach, doppelt oder beides). Hoffe, jemand, der damit vertraut ist, könnte helfen.
Das Folgende ist der letzte aktualisierte Codeblock.
// ****** gesture recognizers ******
- (void)addSingleAndDoubleTapGestureRecognizersToView:(UIView *)view
{
// single tap
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector(handleSingleTapOnView:)];
[singleTapRecognizer setNumberOfTouchesRequired:1];
[view addGestureRecognizer: singleTapRecognizer];
// double tap
UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector (handleDoubleTapOnView:)];
[doubleTapRecognizer setNumberOfTouchesRequired:2];
[singleTapRecognizer requireGestureRecognizerToFail: doubleTapRecognizer];
[view addGestureRecognizer: doubleTapRecognizer];
}
- (void)handleSingleTapOnView:(id)sender
{
}
- (void)handleDoubleTapOnView:(id)sender
{
}
Antworten:
Hinweis: Wenn Sie es verwenden
numberOfTouchesRequired
, muss es sein.numberOfTouchesRequired = 1;
Für Swift
quelle
Swift 3-Lösung:
In der Codezeile singleTap.require (toFail: doubleTap) erzwingen wir das Warten auf das einzelne Tippen und stellen sicher, dass das Tap-Ereignis kein doppeltes Tippen ist.
quelle
Sie müssen die Methode requireGestureRecognizerToFail: verwenden. Etwas wie das:
[singleTapRecognizer requireGestureRecognizerToFail:doubleTapRecognizer];
quelle
// ---- Zuerst müssen Sie die doppelte und einfache Tippgeste zuweisen ------- //
// ----------------------- Anzahl der Abgriffe ---------------- //
// ------- Fügen Sie der Ansicht oder Schaltfläche Doppel- und Einzelklick-Geste hinzu -------- //
quelle
Ich bin mir nicht sicher, ob Sie genau danach suchen, aber ich habe Einzel- / Doppelklicks ohne Gestenerkennung ausgeführt. Ich verwende es in einer UITableView, also habe ich diesen Code in der didSelectRowAtIndexPath-Methode verwendet
Die Methoden singleTap und doubleTap sind mit NSIndexPath als Parameter nur ungültig:
Ich hoffe es hilft
quelle
Lösung für Swift 2:
quelle
Ich habe UIGestureRecognizerDelegate-Methoden implementiert, um sowohl singleTap als auch doubleTap zu erkennen.
Mach das einfach.
Implementieren Sie dann diese Delegatmethoden.
quelle
In einigen Ansichten sind eigene Doppelklickerkenner integriert (
MKMapView
als Beispiel). Um dies zu umgehen, müssen Sie dieUIGestureRecognizerDelegate
Methode implementierenshouldRecognizeSimultaneouslyWithGestureRecognizer
und Folgendes zurückgebenYES
:Implementieren Sie zuerst Ihre Doppel- und Einzelerkenner:
Und dann implementieren:
quelle
In Bezug auf @ Stanleys Kommentar -
Versuchen Sie nicht, mit Tap-Gesten eine Zeilenauswahl zu erstellen,
UITableView
da diese bereits über eine vollständige Tap-Behandlung verfügt.Sie müssen jedoch "Berührungen in Ansicht abbrechen" auf "Einzelne Tipp-Gestenerkennung" auf "NEIN" setzen, da sonst keine Tippereignisse angezeigt werden.
quelle