Was würde dazu führen, dass eine Tabellenansichtszelle nach dem Berühren hervorgehoben bleibt? Ich klicke auf die Zelle und sehe, dass sie hervorgehoben bleibt, wenn eine Detailansicht verschoben wird. Sobald die Detailansicht geöffnet ist, wird die Zelle weiterhin hervorgehoben.
ios
uitableview
cocoa-touch
4thSpace
quelle
quelle
deselectRowAtIndexPath
in meiner viewDidAppear aufzurufen, wenn die Auswahl der Zeile eine neue Ansicht aufruft.-deselectRowAtIndexPath:animated:
Methode für seine tableView-Eigenschaft von auf-viewDidAppear
. Wenn Sie jedoch eine Tabellenansicht in einer UIViewController-Unterklasse haben, sollten Sie-deselectRowAtIndexPath:animated:
von-viewDidAppear
sich aus aufrufen . :)-viewWillAppear:
, die es kaputt machte. Hinzufügen eines Anrufs, damit[super viewWillAppear:animated]
es wieder funktioniert.UITableViewController
‚s -clearsSelectionOnViewWillAppear
Eigenschaft aufYES
(das ist die Standardeinstellung), und Sie haben nicht verhindert[super viewWillAppear]
davor genannt.Der sauberste Weg, dies zu tun, ist auf viewWillAppear:
Auf diese Weise haben Sie die Animation, die Auswahl auszublenden, wenn Sie zum Controller zurückkehren, wie es sein sollte.
Entnommen aus http://forums.macrumors.com/showthread.php?t=577677
Schnelle Version
quelle
viewDidAppear
stattdessen einfach auf .indexPathForSelectedRow
Anruf kann null zurückgeben, daher sollte geprüft werden, ob . In der Dokumentation heißt es : Ein Indexpfad, der die Zeilen- und Abschnittsindizes der ausgewählten Zeile identifiziert, oder Null, wenn der Indexpfad ungültig ist.Hast du eine Unterklasse
-(void)viewWillAppear:(BOOL)animated
? Die ausgewählte UITableViewCell wird nicht abgewählt, wenn Sie[super viewWillAppear:animated];
Ihre benutzerdefinierte Methode nicht aufrufen .quelle
Fügen Sie für die Swift-Benutzer Folgendes zu Ihrem Code hinzu:
Es ist Paulthenerds Antwort, außer in Swift anstelle von Obj-C.
quelle
Swift 3-Lösung
quelle
Wenn Sie eine UITableViewCell verwenden, kommentieren Sie die folgende Zeile
Hoffe das hilft.
quelle
Aktualisiert mit Swift 4
Nach einigen Experimenten, auch basierend auf früheren Antworten, bin ich zu dem Schluss gekommen, dass das beste Verhalten auf zwei Arten erreicht werden kann: (in der Praxis fast identisch)
Ich persönlich nehme die erste Lösung an, weil sie einfach prägnanter ist. Eine andere Möglichkeit, wenn Sie bei der Rückkehr zu tableView eine kleine Animation benötigen, ist folgende
viewWillAppear
:Wenn Sie einen UITableViewController verwenden, können Sie auch die Eigenschaft clearsSelectionOnViewWillAppear nutzen .
quelle
Um das Verhalten zu erhalten, das Kendall Helmstetter Gelner in seinem Kommentar beschreibt, möchten Sie wahrscheinlich nicht deselectRowAtIndexPath, sondern die Eigenschaft clearsSelectionOnViewWillAppear auf Ihrem Controller. Vielleicht wurde dies versehentlich auf JA gesetzt?
Weitere Informationen zu neuen UITableViewController-Unterklassen finden Sie im Kommentar in der Standardvorlage von Apple:
quelle
Ich bekam dieses Problem auch für meine Drilldown-Anwendung. Nachdem ein Viewcontroller, den ich VC nennen werde, nach dem Drücken eines anderen ViewControllers zurückkehrt, bleibt die ausgewählte Zelle in VC hervorgehoben. In meiner App hatte ich VC erstellt, um die zweite Ebene (von drei Ebenen) meines Drilldowns zu verwalten.
Das Problem in meinem Fall ist, dass VC ein UIViewController war (der eine Ansicht enthielt, die eine TableView enthielt). Ich habe VC stattdessen zu einem UITableViewController gemacht (der eine TableView enthielt). Die UITableViewController-Klasse übernimmt automatisch die Deaktivierung der Tabellenzelle, nachdem sie von einem Push zurückgekehrt ist. Die zweite Antwort auf den Beitrag " Problem mit deselectRowAtIndexPath in tableView " gibt eine vollständigere Antwort auf dieses Problem.
Das Problem trat beim Root-Viewcontroller nicht auf, da beim Erstellen der App als "navigationsbasierte App" in XCode der resultierende Root-Viewcontroller bereits in die Unterklasse UITableViewController versetzt wurde.
quelle
Wenn nichts davon für Sie funktioniert, ziehen Sie diese Problemumgehung in Betracht:
Verwenden Sie einen Abwicklungsabschnitt, um Folgendes aufzurufen:
Warum das? In erster Linie, wenn Sie Probleme haben, den Code zur Abwahl zum richtigen Zeitpunkt auszuführen. Ich hatte Probleme damit, nicht mit viewWillAppear zu arbeiten, daher funktionierte das Abwickeln viel besser.
Schritte:
Schreiben Sie den Abwicklungsabschnitt (oder fügen Sie ihn von oben ein) in Ihre 1. VC (die mit der Tabelle).
Gehe zum 2. VC. Ziehen Sie bei gedrückter Ctrl-Taste von der Schaltfläche Abbrechen / Fertig / usw., die Sie verwenden, um diese VC zu schließen, und ziehen Sie sie zum Beenden-Symbol oben.
Wählen Sie den in Schritt 1 erstellten Abwicklungsbereich aus
Viel Glück.
quelle
Ich verwende CoreData, daher war der Code, der für mich funktioniert hat, eine Kombination von Ideen aus verschiedenen Antworten in Swift:
quelle
quelle
Ich habe seit langer Zeit das gleiche Problem, falls jemand anderes Probleme hat:
-tableView: cellForRowAtIndexPath:
Sehen Sie sich Ihre an und prüfen Sie, ob Sie Zellen erstellen oder eine 'Wiederverwendungskennung' verwenden. Stellen Sie in letzterem Fall sicher, dass Ihre Tabelle in IB eine Zelle mit dieser Kennung enthält. Wenn Sie keinen Wiederverwendungsbezeichner verwenden, erstellen Sie einfach eine neue Zelle für jede Zeile.Dies sollte Ihrer Tabelle dann die erwartete "Ausblenden ausgewählte Zeile" beim Erscheinen geben.
quelle
Verwenden Sie diese Methode in der UITableViewCell-Klasse
quelle
Für Swift 3: Ich würde es vorziehen, es in viewDidDisappear zu verwenden
Definieren:-
In viewDidDisappear: -
In didSelectRowAtIndexPath: -
quelle
Wenn die Zelle nach dem Berühren hervorgehoben bleibt, können Sie die UITabelView-Methode aufrufen.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
}
Oder Sie können die folgende Methode verwenden und sie gemäß Ihren Anforderungen ändern:
// MARK: UITableViewDelegate
quelle
Xcode 10, Swift 4
Ich hatte das gleiche Problem und stellte fest, dass ich einen leeren Aufruf von viewWillAppear am unteren Rand meines tableViewController hinterlassen habe. Nachdem ich die leere Überschreibungsfunktion entfernt hatte, blieb die Zeile bei der Rückkehr zur tableView-Ansicht nicht mehr hervorgehoben.
Problem func
Das Entfernen der leeren Funktion löste mein Problem.
quelle
Swift 5 Lösung:
quelle