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?
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.
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.
Ich hatte Erfolg mit [TableView reloadData]. Stellen Sie sicher, dass Sie Ihre Datenquelle aktualisieren und den Neuladecode an einer geeigneten Stelle platzieren.
Wenn Sie die Zelle verschieben, müssen Sie die Zelle direkt über die Methode tableView.cellForRowAtIndexPath
abrufenNachdem Sie die Zelle erhalten haben, aktualisieren Sie sie einfach manuell.
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.
Tags und Links uitableview ios