2013-10-21 6 views
10

Ich habe eine Tabellenansicht mit auswählbaren Zeilen. Wenn ich die Tabellenansicht neu lade, werden möglicherweise einige neue Zeilen hinzugefügt (oder entfernt) und einige Beschriftungen in den Zellen der Tabellenansicht können sich ändern. Das möchte ich erreichen, indem ich [tableView reloadData] anrufe.Laden Sie die Daten einer Tabellenansicht neu, ohne den Auswahlstatus zu löschen.

Leider löscht diese Methode auch den gesamten Status der Tabellenansicht - einschließlich der Auswahl. Aber ich muss die Auswahl behalten.

Wie kann ich also alle Daten in einer Tabellenansicht erneut laden, während die ausgewählten Zeilen weiterhin ausgewählt bleiben?

Antwort

16

Sie können den Index Pfad der ausgewählten Zeile speichern mit:

rowToSelect = [yourTableView indexPathForSelectedRow]; 

Bevor die Daten neu zu laden. Nach dem erneuten Laden:

[yourTableView selectRowAtIndexPath:rowToSelect animated:YES scrollPosition:UITableViewScrollPositionNone]; 
+1

Ziemlich einfach. Vielen Dank! – Mischa

9

Die JeroVallis-Lösung funktioniert für Einzelauswahltabellenansichten. Basierend auf seiner Idee ist das, wie ich es mit multipler Auswahl funktioniert:

NSArray *selectedIndexPaths = [self.tableView indexPathsForSelectedRows]; 
[tableView reloadData]; 
for (int i = 0; i < [selectedIndexPaths count]; i++) { 
    [tableView selectRowAtIndexPath:selectedIndexPaths[i] animated:NO scrollPosition:UITableViewScrollPositionNone]; 
} 
+0

Funktioniert perfekt! Vielen Dank! :) –

+0

aber dies wird den DidselectRowAtIndexPath erneut für jede zuvor ausgewählte Zellen aufrufen. Und löst die Aktionen aus, die ich programmiert habe, wenn der Benutzer eine Zelle auswählt. – omarojo