Je me cognais la tête sur celui-ci et Google ne révélait rien. J'ai finalement travaillé dessus et j'ai pensé l'écrire ici pour le bien de la personne suivante.
Vous avez un UITableView
avec plusieurs sections. Chaque section est homogène, mais le tableau est globalement hétérogène. Vous souhaiterez peut-être autoriser la réorganisation des lignes dans une section, mais pas entre les sections. Peut-être que vous ne voulez même qu'une section soit réorganisable (c'était mon cas). Si vous regardez, comme moi, le, UITableViewDataSourceDelegate
vous ne trouverez pas de notification pour savoir quand il est sur le point de vous permettre de déplacer une ligne entre les sections. Vous en obtenez un quand il commence à déplacer une ligne (ce qui est bien) et un quand il est déjà déplacé et vous avez une chance de se synchroniser avec vos éléments internes. Inutile.
Alors, comment pouvez-vous éviter les commandes à nouveau entre les sections?
Je publierai ce que j'ai fait comme une réponse distincte, laissant à quelqu'un d'autre la possibilité de publier une réponse encore meilleure!
la source
Réponses:
Cette implémentation empêchera de réorganiser en dehors de la section d'origine comme la réponse de Phil, mais elle accrochera également l'enregistrement à la première ou à la dernière ligne de la section, en fonction de l'endroit où le glissement est allé, au lieu de l'endroit où il a commencé.
la source
UIKit.UITableViewController.CustomizeMoveTarget
, pour quiconque se demande.Assez simple, vraiment.
UITableViewDelegate a la méthode:
Ceci est appelé lorsque l'utilisateur survole un point de chute potentiel. Vous avez la possibilité de dire "non! Ne le laissez pas tomber là-bas! Déposez-le plutôt ici". Vous pouvez renvoyer un chemin d'index différent à celui proposé.
Tout ce que j'ai fait, c'est vérifier si les indices de section correspondent. Si c'est le cas, retournez le chemin proposé. sinon, retournez le chemin source. Cela empêche également les lignes d'autres sections de se déplacer même lorsque vous faites glisser - et la ligne déplacée reviendra à sa position d'origine lorsque vous essayez de la déplacer vers une autre section.
la source
Swifty version rapide de la réponse de Jason pour vous les paresseux:
Swift 3, 4 et 5
Swift 1 et 2
la source
Vous pouvez empêcher le mouvement des lignes entre les sections en utilisant la méthode ci-dessous. Ne permettez simplement aucun mouvement entre les sections. Vous pouvez même contrôler le mouvement d'une ligne spécifique dans une section. par exemple, dernière ligne d'une section.
Voici l'exemple:
la source
Swift 3:
la source
Than @Jason Harwig, le code ci-dessous fonctionne correctement.
la source
Pour ne pas changer de position entre les sections Swift3
la source