¿Cómo volver a cargar tableview después de reorderar una fila? Las filas tienen altura variable

tableView que el usuario reordere filas en tableView . Debido a que este evento afecta el contenido, algunos valores numéricos en las celdas deben actualizarse, en todas las demás filas, reloadData una reloadData en moveRowAtIndexPath . Y luego ocurren efectos extraños.

Las celdas Ie parecen superpuestas al tocar el dragger, y alguna celda comienza a moverse hacia arriba y hacia abajo. Es importante saber que la altura de las celdas varía.

Lo extraño, que si reloadData de moveRowAtIndexPath , desaparecerán todos estos fenóless. Solo el contenido no es válido.

Entonces, ¿cómo debo volver a cargar los datos después de reorderar?


ACTUALIZACIÓN: Lo que he hecho mientras tanto reconfigurando celdas en viewDidLayoutSubviews en lugar de call reloadData final de moveRowAtIndexPath . Y funciona al 90% como esperaba, pero las filas todavía son algo más altas que deberían.

 override func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) { //.. reorderOccunetworking = true } override func viewDidLayoutSubviews() { if reorderOccunetworking { for cell in tableView.visibleCells() as! [UITableViewCell] { let ip = tableView.indexPathForCell(cell) if ip != nil { self.configureCell(cell, indexPath: ip!) } } reorderOccunetworking = false } } 

Encontré aquí la respuesta: https://stackoverflow.com/a/4692563/239219

 [tableView beginUpdates]; [tableView endUpdates]; 

Este código obliga a UITableView a recargar únicamente los tamaños de celdas, pero no los contenidos de celdas.

No debe llamar a reloadData después de reorderar. Debe realizar los mismos cambios en sus datos, como los cambios que se han realizado en la pantalla. Por ejemplo: si movió la celda nr 2 a la position 6, debe eliminar su object que llena la celda núm.2 e insertlo nuevamente en la position 6. No proporcionó suficientes detalles, pero por lo general mantendrá sus datos en una set de objects Esta matriz a la que debe hacer los cambios, por lo que su fuente de datos de respaldo es válida.

Aquí hay un enlace a los detalles de Apple.

Acabo de leer el actualizado después de que publiqué mi respuesta. Parece que realmente necesitas reloadData a reloadData . En este caso, recomiendo volver a cargar después de un pequeño retraso con un bloque dispatch_async en el hilo principal. Di después de 0.1.

Todavía no puedo comentar sobre la respuesta de Pteofil, pero él está en lo cierto: si tiene un set de filas numeradas en una tabla y mueve un movimiento de llamada que llama (…), su animation para el movimiento será cancelada por una tablaView .reloadData ().

Como tal, retrasé la recarga de datos (que cambia el nombre de todas las celdas visibles en function de la fuente de datos actualizada (¡no olvides hacer eso cuando mueves cosas!)) Un par de cientos de milisegundos y funciona perfectamente ahora y también se ve genial.