Drag and drop dans NSTableView avec custom cell
olof
Membre
Salut !
J'ai donc une tableview, avec une seule colonne. Cette colonne contient des cellules custom (j'y affiche quelques images, et plusieurs lignes de texte). J'aimerais utiliser le drag and drop pour que l'utilisateur puisse gérer lui-même l'ordre des lignes. Pour info, ma table est remplie par les bindings, avec un NSArrayController. Pour commencer plus simplement, j'ai pu implémenter le drag and drop dans une autre table view, aussi remplie par les bindings, mais contenant des cellules "normales" (du texte quoi). Et ça fonctionne. Je fais la même chose avec ma table faite de cellules customs et là , rien ne se passe. La méthode qui est censé être appelée au début du processus ne l'est même pas. Est-ce que je suis bon pour coder plein de choses moi-même pour pouvoir faire ça ?
Merci !
PS: Si mon explication n'est pas assez complète, dites-moi ce qu'il manque !!!
J'ai donc une tableview, avec une seule colonne. Cette colonne contient des cellules custom (j'y affiche quelques images, et plusieurs lignes de texte). J'aimerais utiliser le drag and drop pour que l'utilisateur puisse gérer lui-même l'ordre des lignes. Pour info, ma table est remplie par les bindings, avec un NSArrayController. Pour commencer plus simplement, j'ai pu implémenter le drag and drop dans une autre table view, aussi remplie par les bindings, mais contenant des cellules "normales" (du texte quoi). Et ça fonctionne. Je fais la même chose avec ma table faite de cellules customs et là , rien ne se passe. La méthode qui est censé être appelée au début du processus ne l'est même pas. Est-ce que je suis bon pour coder plein de choses moi-même pour pouvoir faire ça ?
Merci !
PS: Si mon explication n'est pas assez complète, dites-moi ce qu'il manque !!!
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Et retourne la constante adéquate.
Par contre, mon problème maintenant est que tout ça fonctionne assez bien. En résumé, j'ai ajouté un attribut 'ordre' à mon entité. Quand je modifie l'ordre par un drag and drop, je mets à jour cet attribut pour tous mes objets. Et bien entendu, le tri du tableau se fait sur cet attribut.
Quand je drop une custom cell, l'attribut se met bien à jour, par contre, à l'écran, rien ne se passe. Comme si le tableau n'était pas mis à jour. J'ai essayé de le forcer en faisant un rearrangeObjects sur mon array controller, mais ça ne change rien. Je suis obligé de quitter l'appli et de la relancer pour voir l'ordre juste.
Une idée ?
Donc, une entité core-data (Tache) avec quelques attributs pas très importants et un attribut 'ordre' plus important (c'est du numérique). Mon but est d'utiliser cet attribut pour ordrer ma NSTableView qui affiches mes Taches. Ma NSTableView est constituée de cellules custom.
J'ai donc un tri qui est "instancié" à l'initialisation de l'appli sur cet attribut. Jusque là , ça fonctionne. Après, j'ai autorisé le drag and drop, qui fonctionne pas mal aussi. A savoir que la cellule "draggé" suit la souris et quand je la lâche ailleurs dans le tableau, je récupère bien l'index de ma cellule déplacée ainsi que l'endroit où je la pose.
Les méthodes qui servent au drag and drop, je les ai mises dans ma classe qui étend le NSArrayController qui sert de source à ma NSTableView. Dans IB, cette classe est déclarée comme étant DataSource et Delegate de ma NSTableView.
Dans la méthode "finale" de gestion du drag and drop, je mets à jour l'attribut ordre de toutes mes tâches et je demande à mon NSArrayController de rearranger tout ça. Et là , rien ne se passe.
Par contre, mon modèle est bien correct. Si j'affiche dans ma cellule custom l'attribut ordre, il est bien modifié. Par contre la NSTableView elle n'est pas mise à jour.
Si quelqu'un a une piste, c'est volontiers. Je ne sais plus quoi faire !
Merci !
PS: Projet à disposition sur demande, si quelqu'un a le temps !!!!
Dans mon projet qui ne fonctionne pas, le pire est que une fois que j'ai modifié l'attribut ordre de toutes mes tâches, si je redemande à mon NSArrayController de me renvoyer les objets ordrés (arrangedObjects), ils ne le sont pas ! Comme dit précédement, l'attribut ordre a bien sa nouvelle valeur, mais pas l'ombre d'un tri.
Et si je demande à mon NSArrayController sur quoi il trie, il me répond bien que la clé est "ordre" !!!
Une piste pour savoir d'ou ça pourrait provenir ? Je ne sais plus quoi faire !
J'ai bien appelé [NSarrayController rearrangeObjects], malheureusement....
Merci !