Ich habe ein Problem mit UITableView's
didSelectRowAtIndexPath
.
Meine Tabelle ist so eingerichtet, dass bei Auswahl der Zeile ein neuer Ansichts-Controller initialisiert und verschoben wird.
Wenn ich zum ersten Mal auf eine Zeile in der Tabelle tippe, wird die Methode nicht aufgerufen. Sobald ich eine andere Zeile ausgewählt habe, funktioniert sie wie gewohnt.
Ich habe dies durch Setzen eines Haltepunkts überprüft didSelectRowAtIndexPath
. Beim Hinzufügen eines NSLog
zu der Methode wird angezeigt, dass bei Auswahl der zweiten Zeile, in der der neue Ansichtscontroller endgültig verschoben wird, zwei Protokollanweisungen gleichzeitig in der Konsole angezeigt werden.
Irgendwelche Vorschläge?
uitableview
cocoa-touch
uikit
didselectrowatindexpath
Mark Adams
quelle
quelle
tableView:didSelectRowAtIndexPath:
?Antworten:
Hat De selectRowAtIndexPath möglicherweise versehentlich eingegeben ?
quelle
Überprüfen Sie auch die Auswahleigenschaft Ihrer Tabellenansicht in der XIB-Datei. Verwenden Sie je nach Bedarf "Einzelauswahl" oder "Mehrfachauswahl".
quelle
Ich habe folgendes Problem festgestellt:
In meinem Fall war mein Fehler das Einchecken
Show Selection on Touch
in Interface Builder. Sie können es in IB hier deaktivieren:Hoffe das hilft jemandem
quelle
Überprüfen Sie, ob Sie in Ihrer Klasse Gestenerkenner festgelegt haben. Das Entfernen der Geste hat bei mir funktioniert.
quelle
Ich habe sogar darüber diskutiert, diese Antwort zu veröffentlichen, weil ich denke, dass die Sterne irgendwie ausgerichtet sind, damit sich dies manifestiert.
Ich habe eine Variation dieses Problems und habe die anderen Lösungen überprüft. In meiner Tabellenansicht verarbeitet es nicht die allerletzte Zeile meiner Tabelle beim ersten Tippen. Es hebt es hervor, wird aber
didSelectRowAtIndexPath
nicht aufgerufen. Alle anderen Zeilen funktionieren einwandfrei. Aber wenn ich den Tableview-Bounce einschalte, scheint es das Problem zu lösen (aber dann muss man sich mit einem Tableview-Bounce befassen).quelle
UITableViewCellSelectionStyleNone wurde für die Zelle festgelegt, in der dieses Problem angezeigt wird (ios9).
Ich habe angerufen
als erstes in
Das ist nicht dasselbe, aber gut genug. Ich frage mich, welche Art von Tischbruch ios10 bringt.
quelle
setSelected
aber während der Benutzer die Zelle hält, erscheint die Auswahl, die nicht akzeptabel istSWIFT 2
Stellen Sie sicher, dass Sie diesen Wert auf true gesetzt haben:
self.tableView.allowsSelection = true
Setzen Sie dies über Ihr Recht nach Ihrem
viewDidLoad()
und vor demsuper.viewDidLoad()
quelle
SWIFT 3
Wenn Sie mit Swift 3 in einer Klasse arbeiten, die keine ist
UITableViewController
und die Sie verwendenUITableViewDelegate
, müssen Sie möglicherweise den Methodentitel verwenden:Dies hat bei mir funktioniert, obwohl ich gerade mein Projekt auf Swift 3 migriert habe. Es ist ziemlich neu, sodass dies möglicherweise später behoben wird.
quelle
Wenn Sie in Ihrer Klasse einen UITapGestureRecognizer festgelegt haben, können Sie diese Zeile in Ihrem didSelectRowAtIndexPath hinzufügen:
Das hat bei mir funktioniert.
quelle
Dieses Problem tritt auch auf, wenn Sie mit dem Gestenerkenner in einer Tabellenansicht arbeiten. In diesem Fall müssen Sie diese nicht entfernen. Sie müssen lediglich sicherstellen, dass Ihre Gesteneigenschaft
cancelsTouchesInView = false
ein boolescher Wert ist, der sich darauf auswirkt, ob Berührungen an eine Ansicht geliefert werden, wenn Eine Geste wird erkannt.quelle
SWIFT 3
Keine der anderen Antworten funktionierte in meinem Fall. Was für mich behoben wurde, war:
tableView.delaysContentTouches = false
quelle
didSelectRowAt
Funktion wurde in meiner App beim ersten oder zweiten Tippen nicht aufgerufen ... Ich habe versucht, das Problem zu lösen, konnte keine Lösung finden. Aber plötzlich wurde mir klar, dass ich view.animation color change ... verwendete. DieDelegate
Methode wurde nicht aufgerufen, solange die Animation bestehen bliebquelle
In meinem Fall hatte ich einen UITableView-Abschnittsheader mit einer Gestenerkennung. Wenn Sie auf die Kopfzeile tippen, sollten Sie einige Zeilen in diesen Abschnitt einfügen und die Einfügung animieren (z. B. Abschnitt erweitern / reduzieren). Beim ersten Erweitern und Tippen wurde die didSelectRow-Delegatenmethode nicht ausgelöst. Für weitere Abgriffe und Erweiterungs- / Reduzierungsaktionen funktionierte es wie erwartet.
Per Antwort von @Ayoub Nouri habe ich cancelsTouchesInView auf false gesetzt, wodurch das Problem behoben wurde. tapGestureRecognizer? .cancelsTouchesInView = false
quelle
Swift 4.2
Durch Deaktivieren von "Verzögerung beim Aufsetzen" im Attributinspektor wurde das Problem behoben.
Danach sind die Klicks glatt und didSelectRowAt wird sofort ausgelöst.
quelle
Was für mich funktionierte, war, "didSelect ..." einzugeben und dann den Rest durch Autokorrektur ausfüllen zu lassen. Anscheinend war ein Detail meiner Syntax wackelig. Wie andere gesagt haben, benutze die IDE !!
quelle