Ich habe Blick mit einem UITapGestureRecognizer
. Wenn ich also auf die Ansicht tippe, wird über dieser Ansicht eine andere Ansicht angezeigt. Diese neue Ansicht verfügt über drei Schaltflächen. Wenn ich jetzt auf eine dieser Tasten drücke, wird die Tastenaktion nicht angezeigt, sondern nur die Tippgeste. Daher kann ich diese Schaltflächen nicht mehr verwenden. Was kann ich tun, um die Ereignisse auf diese Schaltflächen zu übertragen? Das Seltsame ist, dass die Schaltflächen immer noch hervorgehoben werden.
Ich kann den UITapGestureRecognizer nicht einfach entfernen, nachdem ich ihn erhalten habe. Denn damit kann auch die neue Ansicht entfernt werden. Bedeutet, ich möchte ein Verhalten wie die Vollbild-Videosteuerung .
void
sodass zur Laufzeit keine Informationen zurückbleiben, die zur Erkennung verwendet werden können. Sie können jedoch die Ansichtshierarchie durchgehen, nach Steuerelementen suchenUIControl
und diese zurückgeben,NO
wenn Sie Steuerelemente finden.Als Folge von Caseys Folge von Kevin Ballards Antwort:
Dadurch funktionieren im Grunde alle Benutzereingabetypen von Steuerelementen wie Schaltflächen, Schiebereglern usw.
quelle
setCancelsTouchesInView = NO
der Interaktion mit Steuerelementen keine Tippgeste auszulösen. Sie können es jedoch besser schreiben:return ![touch.view isKindOfClass:[UIControl class]];
Diese Antwort finden Sie hier: Link
Sie können auch verwenden
Dies verhindert, dass der Hahnerkenner der einzige ist, der alle Hähne erfasst
UPDATE - Michael erwähnte den Link zu der Dokumentation, die diese Eigenschaft beschreibt: cancelsTouchesInView
quelle
Als Folge der Antwort von Kevin Ballard hatte ich das gleiche Problem und verwendete schließlich diesen Code:
Es hat den gleichen Effekt, funktioniert jedoch für jeden UIButton in jeder Ansichtstiefe (mein UIButton war mehrere Ansichten tief und der Delegierte von UIGestureRecognizer hatte keinen Verweis darauf.)
quelle
In iOS 6.0 und höher verhindern Standardsteuerungsaktionen ein überlappendes Verhalten der Gestenerkennung. Die Standardaktion für eine Schaltfläche ist beispielsweise ein einziges Tippen. Wenn Sie einen einzelnen Tipp-Gestenerkenner an die übergeordnete Ansicht einer Schaltfläche angehängt haben und der Benutzer auf die Schaltfläche tippt, empfängt die Aktionsmethode der Schaltfläche das Berührungsereignis anstelle des Gestenerkenners. Dies gilt nur für die Gestenerkennung, die die Standardaktion für ein Steuerelement überlappt. Dazu gehören: .....
Aus Apples API-Dokument
quelle
Diese Antworten waren unvollständig. Ich musste mehrere Beiträge lesen, um diese boolesche Operation zu verwenden.
Fügen Sie dies in Ihre * .h-Datei ein
Fügen Sie dies in Ihre * .m-Datei ein
quelle
Habe von hier aus einen anderen Weg gefunden . Es erkennt die Berührung, ob in jeder Taste oder nicht.
(1) pointInside: withEvent: (2) locationInView:
quelle
Hier ist die Swift-Version von Lily Ballards Antwort , die für mich funktioniert hat:
quelle
Swift 5
Schaltfläche in der Übersicht mit Tapgesture
In meinem Fall die Implementierung von hitTest für mich funktioniert. Ich hatte Sammlungsansicht mit Knopf
Diese Methode durchläuft die Ansichtshierarchie, indem sie die
point(inside:with:)
Methode jeder Unteransicht aufruft, um zu bestimmen, welche Unteransicht ein Berührungsereignis erhalten soll. Wennpoint(inside:with:)
true zurückgegeben wird, wird die Hierarchie der Unteransicht auf ähnliche Weise durchlaufen, bis die vorderste Ansicht mit dem angegebenen Punkt gefunden wird.quelle
Sie können den UITapGestureRecognizer daran hindern, andere Ereignisse abzubrechen (z. B. das Tippen auf Ihre Schaltfläche), indem Sie den folgenden Booleschen Wert festlegen:
quelle
Wenn Ihr Szenario so ist:
Sie haben eine einfache Ansicht und einige UIButtons, UITextField-Steuerelemente, die dieser Ansicht als Unteransichten hinzugefügt wurden. Jetzt möchten Sie die Tastatur schließen, wenn Sie eine andere Stelle in der Ansicht als die Steuerelemente berühren (Unteransichten, die Sie hinzugefügt haben).
Dann ist die Lösung:
Fügen Sie Ihrem XYZViewController.m die folgende Methode hinzu (die Ihre Ansicht hat)
quelle
Wenn Sie die Antwort von cdasher optimieren, erhalten Sie
quelle