Wie programmgesteuert verschobene Zeile neu geladen?

8

Frustrierende Tatsache: Nach dem Aufruf von tableView:moveRowAtIndexPath:toIndexPath: wird tableView:cellForRowAtIndexPath: für diese Zeile nicht aufgerufen.

Call reloadRowsAtIndexPaths:withRowAnimation: nach oder vor tableView:moveRowAtIndexPath:toIndexPath: in UITableView updates block funktioniert auch nicht: es löst Inkonsistenzfehler aus.

Ich sehe 2 Problemumgehungen: Löschen + Einfügen statt Verschieben oder Neuladen innerhalb eines anderen Update-Blocks.

Meine Frage ist: Gibt es eine andere Möglichkeit, die Zeile von UITableView innerhalb desselben Update-Blocks neu zu laden und zu verschieben?

    
folex 06.08.2013, 15:13
quelle

5 Antworten

4

Ich glaube nicht, dass es möglich ist, gleichzeitig zu ziehen und nachzuladen. Ich habe mehrere Ansätze ausprobiert und die beste Lösung, die ich mir ausgedacht habe, ist, das Reload kurz vor den Batch-Updates durchzuführen. Ich animiere reloadRows nicht, weil es Konflikte mit den Batch-Update-Animationen zu verursachen scheint.

%Vor%

Außerdem lege ich meine Zellenkonfigurationslogik normalerweise in eine separate Methode wie

%Vor%

Damit kann ich es einfach direkt aufrufen und reloadRowsAtIndexPaths ganz umgehen. Sie werden die integrierte Animation auch nicht auf diese Art erhalten, aber Sie können Ihre eigenen Animationen machen.

    
Timothy Moose 06.08.2013, 16:26
quelle
0

Ich hatte Erfolg mit [TableView reloadData]. Stellen Sie sicher, dass Sie Ihre Datenquelle aktualisieren und den Neuladecode an einer geeigneten Stelle platzieren.

    
Katamaritaco 06.08.2013 15:15
quelle
0

Wenn Sie die Zelle verschieben, müssen Sie die Zelle direkt über die Methode tableView.cellForRowAtIndexPath

abrufen

Nachdem Sie die Zelle erhalten haben, aktualisieren Sie sie einfach manuell.

    
the Reverend 21.07.2015 15:18
quelle
0
%Vor%     
user3306145 12.08.2015 10:40
quelle
0

Beim Sortieren nach "dateModified" stieß ich auf ein ähnliches Problem, aber ich zeigte diese Eigenschaft auch auf dem Label der Zelle an. Sowohl "move" als auch "update" waren erforderlich. "move" wurde nur so aufgerufen, dass die richtige Zelle an den Anfang der Liste gebracht wurde, aber der Etikettentext wurde nicht aktualisiert.

Meine Lösung für eine einfache UITableViewCell.

Als Erstes machst du ".move" als normal. Direkt nachdem Sie eine benutzerdefinierte Konfigurationsmethode aufgerufen haben, die für die Animation des "update" für die Zelle verantwortlich ist.

%Vor%

Die configure-Methode sieht so aus (Note animiert ist optional):

%Vor%

Verwenden Sie die configure-Methode hier ohne Animation:

%Vor%

Wenn Sie eine kompliziertere Zelle (Unterklasse) haben, könnten Sie wahrscheinlich die configure-Methode in den Unterklassencode verschieben. Der wichtige Teil ist eine Methode, um die Zellendaten mit Animation optional zu aktualisieren.

    
Michael Rose 01.08.2017 01:31
quelle

Tags und Links