Me estaba golpeando la cabeza con este, y Google no encontró nada. Finalmente lo resolví y pensé en escribirlo aquí por el bien de la próxima persona.
Tienes una UITableView
con varias secciones. Cada sección es homogénea, pero la tabla en general es heterogénea. Por lo tanto, es posible que desee permitir el reordenamiento de filas dentro de una sección, pero no entre secciones. Tal vez solo quieras que una sección se pueda reordenar (ese fue mi caso). Si está mirando, como yo, UITableViewDataSourceDelegate
no encontrará una notificación para cuando esté a punto de permitirle mover una fila entre secciones. Obtienes uno cuando comienza a mover una fila (lo cual está bien) y otro cuando ya lo ha movido y tienes la oportunidad de sincronizar con tus cosas internas. No es útil.
Entonces, ¿cómo se pueden evitar nuevos pedidos entre secciones?
Publicaré lo que hice como una respuesta separada, ¡dejándolo abierto para que alguien más publique una respuesta aún mejor!
fuente
Respuestas:
Esta implementación evitará el reordenamiento fuera de la sección original como la respuesta de Phil, pero también ajustará el registro a la primera o última fila de la sección, dependiendo de dónde fue el arrastre, en lugar de dónde comenzó.
fuente
UIKit.UITableViewController.CustomizeMoveTarget
, para cualquiera que se pregunte.Realmente bastante simple.
UITableViewDelegate tiene el método:
Esto se llama mientras el usuario se desplaza sobre un punto de caída potencial. Tienes la oportunidad de decir: "¡No! ¡No lo dejes ahí! ¡Déjalo aquí!" Puede devolver una ruta de índice diferente a la propuesta.
Todo lo que hice fue comprobar si los índices de sección coinciden. Si lo hacen genial, devuelva la ruta propuesta. si no, devuelve la ruta de origen. Esto también evita que las filas en otras secciones se muevan incluso fuera del camino mientras arrastra, y la fila arrastrada volverá a su posición original si intenta moverla a otra sección.
fuente
Versión rápida y rápida de la respuesta de Jason para ustedes, gente perezosa:
Swift 3, 4 y 5
Swift 1 y 2
fuente
Puede evitar el movimiento de filas entre secciones utilizando el método siguiente. Simplemente no permita ningún movimiento entre secciones. Incluso puede controlar el movimiento de una fila específica dentro de una sección. por ejemplo, última fila de una sección.
Aquí está el ejemplo:
fuente
Swift 3:
fuente
Que @Jason Harwig, el siguiente código funciona correctamente.
fuente
Para no cambiar de posición entre secciones Swift3
fuente