Ich habe eine UITableView von Kunden, wo eine Zeile / Kunde ausgewählt ist. Der Benutzer kann dann eine andere Ansicht auf den UINavigationController-Stapel schieben, um einen neuen Kunden hinzuzufügen. Wenn ich den untergeordneten Bildschirm öffne und zum UITableView zurückkehre, ist die zuvor ausgewählte Zeile nicht mehr ausgewählt.
Ich kann die Zeile in viewDidAppear () erneut auswählen, sieht aber schlecht aus, da Sie die Auswahl aufheben und die Auswahl sehen können. Gibt es eine Möglichkeit, die ausgewählte Zeile beizubehalten, wenn Sie vom untergeordneten Bildschirm zurückkehren?
Ich gehe davon aus, dass Sie einen Tabellenansicht-Controller verwenden, da Sie ansonsten ohnehin dafür verantwortlich sind, dieses Verhalten zu schreiben. In einem Tabellenansicht-Controller ist dies jedoch einfach. Fügen Sie einfach in viewDidLoad hinzu:
%Vor%Dadurch bleibt die Zeile ausgewählt, es sei denn, Sie heben die Auswahl manuell auf oder der Benutzer wählt eine andere Zeile in der Tabelle aus.
Standardmäßig wird eine ausgewählte Zeile abgewählt (mit Animation), wenn Sie zu diesem VC zurückkehren.
Wenn Sie also einen DetailViewController drücken, bleibt die Zelle ausgewählt, bis Sie zum RootViewController zurückkehren und dann automatisch die Auswahl aufgehoben wird.
Ich hatte auch so ein Problem. Achten Sie darauf, immer die Implementierung von Methoden wie viewWillAppear, viewWillDisappear usw. der Superklasse aufzurufen Rufen Sie deselectRowAtIndexPath auch nicht manuell auf:
Das ist möglich:
Nur einmal: Wenn Sie den statischen Inhalt in TAbleView haben,
%Vor%Die Zelle wird abgewählt, weil das TAbleView neu geladen wird.
Aber für dynamische Inhalte müssen Sie die Delegate-Methode verwenden:
%Vor%In diesem Fall müssen Sie den IndexPfad, der mit der scrollPosition angezeigt werden soll, mit select als tableviewposition übergeben.
Sie müssen anrufen:
%Vor%Dies ist in der didSelectRowAtIndexPath-Delegate-Methode für eine UITableView gefunden.
Sie können nicht immer eine TableViewCell auswählen. Es wird wieder normal, sobald es seinen Zweck erfüllt. Ich glaube, Sie haben hervorgehoben oder scheinen ausgewählt , und ich beantworte die darauf basierende Frage.
Holen Sie sich die Zeile, die am cellForRowAtIndexPath
ausgewählt wurde. Wenn Sie Ihren Navigationscontroller aufrufen und zum tableView zurückkehren, gehen Sie zum cellForRowAtIndexPath
und lassen Sie diese Zelle markieren (Sie können einen beliebigen UIColor verwenden) - es gibt keine spezielle Möglichkeit, Dinge hervorzuheben - nutzen Sie Ihre Vorstellungskraft - Standard-Highlight Stil ist Blau, während der Text Weiß ist.
Wie wird das gemacht?
cellForRowAtIndexPath
finden
NSUserDefaults
und Sie können auch NSUserDefaults
verwenden, um zwischen den Bildschirmen zu kommunizieren, um herauszufinden, ob das Element von diesem Bildschirm aus aufgerufen wurde. [tableView reloadData]
in viewWillAppear
cellForRowAtIndexPath
und ändern Sie diese Zelle mit cell.backgroundColor
oder etwas. Ohne Code kann ich nur einen Hinweis geben: Verwenden Sie [tableView reloadData]
nicht mehr, verwenden Sie [tableView beginUpdates]
, [tableView endUpdates]
und – insertRowsAtIndexPaths:withRowAnimation:
und – reloadRowsAtIndexPaths:withRowAnimation:
. Die Dinge sollten wie erwartet funktionieren.
Tags und Links objective-c iphone uitableview cocoa-touch