UITapGestureRecognizer bricht UITableView didSelectRowAtIndexPath
Ich geschrieben habe meine eigene Funktion zum scrollen von text-Felder, wenn die Tastatur angezeigt wird. Um zu schließen Sie die Tastatur, indem Sie auf Tippen Weg von der Textfeld, habe ich einen UITapGestureRecognizer
sorgt dafür, dass der Rücktritt first responder auf das Textfeld beim Tippen Weg.
Nun habe ich auch erstellt ein autocomplete für die textfield-Instanz erstellt, die UITableView
nur unter dem text-Feld und füllt es mit Artikeln wie der Benutzer text eingibt.
Jedoch, bei der Auswahl eines der Einträge in der auto abgeschlossen Tabelle didSelectRowAtIndexPath
nicht genannt. Stattdessen scheint es, dass die tap gesture recognizer wird immer genannt und tritt nur first responder.
Ich vermute, es ist ein Weg zu sagen, das tap gesture recognizer zu halten, übergeben Sie die Tippen Sie auf Nachricht, bis zu der UITableView
, aber ich kann nicht herausfinden, was es ist. Jede Hilfe wäre sehr geschätzt.
InformationsquelleAutor Jason | 2011-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, fand es schließlich nach einigem suchen durch gesten-recognizer-docs.
War die Lösung zu implementieren
UIGestureRecognizerDelegate
und fügen Sie den folgenden:Kümmerte sich um ihn. Hoffentlich hilft das anderen auch.
Dank Freund funktioniert es tadellos.
Mehr Glück hatte ich mit
return ![touch.view isKindOfClass:[UITableViewCell class]];
Das funktioniert nicht, wenn Sie Tippen Sie auf die Etiketten im inneren der Zelle. Tatsächlich Jasons Antwort funktioniert perfekt für das, was ich brauche.
Deaktivieren gestik-Erkennung
![touch.view isEqual: self.tableView] &&
vor der[touch.view isDescendantOfView: self.tableView]
auszuschließentableView
selbst (weilisDescendantOfView:
gibt auchYES
wenn das argument-Ansicht ist die Empfänger-Sicht). Hoffe, das hilft anderen Menschen wollen, dass das gleiche Ergebnis.InformationsquelleAutor Jason
Der einfachste Weg, um dieses problem zu lösen ist:
Dadurch können die
UIGestureRecognizer
erkennen, die Tippen Sie auf und geben Sie die berühren Sie, um die nächste responder. Eine unbeabsichtigte Folge dieser Methode ist, wenn Sie eineUITableViewCell
auf dem Bildschirm drückt, dass eine weitere view-controller. Wenn der Benutzer tippt auf die Zeile, um zu schließen Sie die Tastatur, der Tastatur und das drücken erkannt wird. Ich bezweifle, dass dies ist, was Sie wollen, aber diese Methode ist geeignet für viele Situationen.Auch, die Erweiterung auf Robert ' s Antwort, wenn Sie einen Zeiger auf den tableview in Frage, dann kann man direkt vergleichen, Ihre Klasse, anstatt zu konvertieren zu einem string und hoffen, dass Apple nicht ändern, dass die Nomenklatur:
Denken Sie daran, Sie müssen auch erklären, die
UIGestureRecognizer
ein Delegierter, der mit diesem code in der.Sauberer als die akzeptierte Antwort
Vielleicht noch nutzen möchten
isDescendantOfView
statt nur zu überprüfen, ob dieclass
ist gleich, da Sie Tippen auf eine Untersicht. Hängt davon ab, was Sie brauchen.Dies sollte die akzeptierte Antwort!
InformationsquelleAutor TMilligan
Set
cancelsTouchesInView
Ihrer Erkennung falsch. Ansonsten, es "verbraucht" die touch-für sich selbst, und nicht geben Sie auf, um die Tabelle anzuzeigen. Deshalb ist die Auswahl Ereignis nie passiert.beispielsweise in
swift
Thanx alot für dieses!
Dies ist die sauberste in Swift. Dank
Danke, cancelsTouchesInView hat den trick!
funktioniert gut innerhalb der Zellen in tableview, schön und einfach!
InformationsquelleAutor Abdulrahman Masoud
Sowie für Swift (basierend auf der Antwort von @Jason):
Perfekt....Dank!!!!!!
vielen Dank!!!!!
InformationsquelleAutor Nikolaj Nielsen
Vielleicht habe ich eine bessere Lösung zum hinzufügen einer tap-Geste über einer Tabelle anzeigen, aber da der cell-Auswahl zur gleichen Zeit:
Ich nur eine Zelle an der Stelle des Bildschirms, wo der Benutzer Tippen. Wenn keine index-Pfad gefunden wird, dann lass ich die Geste empfangen, die berühren, sonst storniere ich es. Für mich funktioniert es Super.
InformationsquelleAutor bonokite
Ich denke, es gibt keine Notwendigkeit zu schreiben, die Blöcke des codes einfach einstellen
cancelsTouchesInView
zufalse
für Ihre Geste Objekt ,standardmäßig ist es
true
und Sie müssen nur, um esfalse
.Wenn Sie mit
UITapGesture
Objekt in Ihrem code und auch mitUIScrollView
(tableview , collectionview), dann setzen Sie diese Eigenschaftfalse
Vielen Dank für dieses posting Antworten
InformationsquelleAutor SHUBHAYAN KUNDU
Eine ähnliche Lösung zu implementieren
gestureRecognizer:shouldReceiveTouch:
mit der view-Klasse um zu bestimmen, welche Maßnahme zu ergreifen ist. Dieser Ansatz hat den Vorteil, dass Sie kein masking taps in der region unmittelbar um den Tisch (dieser Bereich ist Aussicht auf noch absteigen aus der UITableView Instanzen, aber Sie repräsentieren nicht die Zellen).Dieser hat auch einen bonus, es funktioniert mit mehreren Tabellen in einer einzigen Ansicht (ohne das hinzufügen zusätzlicher code).
Nachteil: es wird davon ausgegangen, dass Apple wird sich nicht ändern den Klassennamen.
Zur Beseitigung der string der Klasse Namen, verwenden Sie diese Zeile
return ![[touch.view.superview class] isSubclassOfClass:[UITableViewCell class]];
InformationsquelleAutor Robert Altman
Hatte ich eine andere situation, wo ich wollte, dass die Note Geste Funktion, die aufgerufen werden nur, wenn der Benutzer getippt außerhalb der Tabelle anzeigen. Wenn der Benutzer abgegriffen innerhalb der Tabelle anzeigen, dann werden die touch-gesten-Funktion sollte nicht aufgerufen werden. Darüber hinaus, Wenn die touch-Geste-Funktion aufgerufen wird, sollte es dennoch passieren das touch-event auf dem Standpunkt, dass war tippte auf, anstatt zu konsumieren es.
Ist der resultierende code ist eine Kombination von Abdulrahman Masoud ist die Antwort, und Nikolaj Nielsen ' s Antwort.
Und in der
MyViewController
Klasse, die Klasse, die hat dieUITableView
imonViewDidLoad()
, ich habe sicher zu nennenaddGestureRecognizer()
:InformationsquelleAutor Ali Mizan
Während es ist spät, und viele Menschen finden, dass die obigen Vorschläge funktionieren, konnte ich nicht Jason oder TMilligan Methoden zu arbeiten.
Ich habe eine Statische tableView mit mehreren Zellen mit Textfeldern fest, die Anzahl von Eingaben nur mit Hilfe der zahlentastatur. Das war ideal für mich:
Sicherzustellen, dass Sie umgesetzt haben, dies
<UIGestureRecognizerDelegate>
in Ihr .h-Datei.Diese Zeile
![touch.view isKindOfClass:[UITableViewCell class]]
prüft, ob ein tableViewCell wurde abgehört und entlässt alle aktiven Tastatur.InformationsquelleAutor App Dev Guy
Einfache Lösung ist die Verwendung von UIControl-Instanzen in UITableViewCell zu bekommen, berührt. Sie können eine beliebige Ansichten mit userInteractionEnables == NEIN zu UIControl zu bekommen tippt.
InformationsquelleAutor Andrew Romanov
Setzen Sie einfach
cancels touches in view
zufalse
für jede Geste unterhalb der(table/collection)View
:- Interfacebuilder
- Code
InformationsquelleAutor Mojtaba Hosseini
Hier ist meine Lösung, die Bande der recognizer ist shouldReceiveTouch direkt an, ob die Tastatur zeigt.
In Ihre tap gesture recognizer delegieren:
Und die
PFXKeyboardStateListener.h
:Und die
PFXKeyboardStateListener.m
:Möchten Sie vielleicht zu aktualisieren, das singleton-Muster von der Tastatur Hörer, ich habe nicht bekommen es noch. Hoffe, das funktioniert für alle anderen so gut, wie es für mich funktioniert. ^^
InformationsquelleAutor bgfriend0
Implementieren Sie diese Methode für das delegieren von UIGestureRecognizer:
InformationsquelleAutor cxa
In swift können Sie diese innerhalb
InformationsquelleAutor Abdulrahman Masoud
Meinem Fall war das anders, darunter ein uisearchbar und uitableview auf selbst.Blick. Ich wollte zu entlassen uisearchbar Tastatur durch berühren der anzeigen.
Auf UISearchBar Delegate-Methoden:
Wenn der Benutzer berührt, auf sich selbst.Ansicht:
InformationsquelleAutor A.G
Dies ist meine Lösung, basierend auf oben Antworten...
Es ist für mich gearbeitet...
InformationsquelleAutor iOS
PROBLEM:
In meinem Fall, das Problem war, dass ich ursprünglich platziert eine Schaltfläche in jedem collectionView Zelle und festlegen der Randbedingungen zum füllen der Zelle, so dass, wenn auf die Zelle geklickt wurde, es wäre auf die Schaltfläche klicken, aber die Tasten Funktion leer war, also war nix erscheinenden passiert zu sein.
UPDATE:
Ich reparierte dies, indem Sie die Schaltfläche aus der collection view Zelle.
InformationsquelleAutor Marcus Levi