Wie verwalte ich die ausgewählte Zeile von UITableView, wenn ich von einem untergeordneten UINavigationController-Bildschirm zurückkomme?

8

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?

    
ChrisP 22.07.2011, 19:42
quelle

7 Antworten

22

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.

    
Benjamin Mayo 23.07.2011 05:27
quelle
1

Wenn Sie es in viewWillAppear: auswählen, sollte es ausgewählt werden, ohne dass der Benutzer es sieht. Würde das dein Problem lösen?

    
Monolo 22.07.2011 19:58
quelle
0

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:

    
Christian Schnorr 22.07.2011 19:47
quelle
0

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.

    
Ajay Sharma 23.07.2011 12:09
quelle
0

Sie müssen anrufen:

%Vor%

Dies ist in der didSelectRowAtIndexPath-Delegate-Methode für eine UITableView gefunden.

    
user858548 22.07.2011 19:55
quelle
-1

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?

  1. Ausgewählte Zeile in cellForRowAtIndexPath finden
  2. Store befindet sich in einer externen Variablen / oder 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.
  3. [tableView reloadData] in viewWillAppear
  4. Überprüfen Sie den NSUserDefaults-Wert in cellForRowAtIndexPath und ändern Sie diese Zelle mit cell.backgroundColor oder etwas.
Legolas 22.07.2011 19:54
quelle
-3

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.

    
Marcelo Alves 22.07.2011 20:26
quelle