source - uitableviewcell swift 3
UITableView Eliminar, insertar y mover pedidos en actualizaciones por lotes (1)
Al mover la fila de la tabla, especifique dos índices:
-
indexPath
en la tabla original desde donde tomar esta fila newIndexPath
en la tabla resultante donde aparecerá esta filafunc moveRow (en indexPath: IndexPath, a newIndexPath: IndexPath)
Posibles operaciones en conflicto en un solo lote, lo que provoca el bloqueo de la aplicación:
- tratando de mover una fila que también elimina
- tratando de mover la misma fila a múltiples destinos
- Intentando mover varias filas al mismo destino.
- tratando de mover una fila al mismo destino donde inserta una nueva fila
No es posible mover una fila que está insertando, porque no estaba allí en la tabla original.
De forma predeterminada, la fila movida no se volverá a cargar desde el origen de datos.
UITableView
actualizaciones de UITableView
entre las llamadas beginUpdates
y endUpdates
se agrupan y todas se realizan al mismo tiempo. La documentación de Apple es específica sobre el orden en que se realizan las operaciones de insert
y delete
:
Las operaciones de eliminación y recarga dentro de un bloque de animación especifican qué filas y secciones de la tabla original se deben eliminar o volver a cargar; las inserciones especifican qué filas y secciones deben agregarse a la tabla resultante. Las rutas de índice utilizadas para identificar secciones y filas siguen este modelo. La inserción o eliminación de un elemento en una matriz mutable, por otro lado, puede afectar el índice de matriz utilizado para la inserción sucesiva o la operación de eliminación; por ejemplo, si inserta un elemento en un determinado índice, se incrementan los índices de todos los elementos subsiguientes en la matriz.
También vale la pena señalar que:
Las llamadas a beginUpdates y endUpdates se pueden anidar; todos los índices se tratan como si solo existiera el bloque de actualización externo .
[ Énfasis mío ]
Entonces: piense en las eliminaciones como ocurriendo en una primera pasada, y luego en las inserciones que suceden después de esto, usando las nuevas rutas de índice que resultan después de las eliminaciones.
Eso es útil. Sin embargo , no he encontrado ninguna documentación sobre dónde se producen los movimientos de fila (y sección), qué indexación deben usar y si esto afecta los otros pasos. ¿Nadie sabe?