Question

Je souhaite que les utilisateurs puissent glisser-déposer des fichiers vidéo NSTableView. Lorsqu'ils déposent le fichier, il sera ajouté en tant que ligne dans la vue tableau.

Comment pourrais-je m'y prendre? Actuellement, la vue table prend ses données d'un contrôleur Array (qui prend ses données d'un NSMutableArray)

J'ai trouvé cette documentation, mais ne semble pas pouvoir la faire fonctionner.

j'ai ..

  • a créé un " TableCon " classe (que j'ai modifié pour hériter de NSTableView, pas de NSObject)
  • a changé la classe NSTableView en TableCon
  • définissez la sortie déléguée du NSTableView sur cette classe
  • appelé registerForDraggedTypes dans l'init de TableCon
  • implémenté - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender; (à nouveau dans TableCon)

.. mais rien, cela agit comme si je n'avais jamais rien changé (aucune erreur), qu'est-ce que je fais mal?

Modifier: j'ai essayé de mettre en œuvre la suggestion de Boaz Stuller et j'ai également trouvé cette description de la solution (la première réponse inclut la solution du premier message). Donc, ce que je viens de faire est maintenant.

  • Sous-classe NSArrayController qui alimente le contenu en vue de table (TableListCon)
  • Ajoutez tableView la sortie à TableListCon (et pointez-la vers le NSTableView)
  • Implémentez validateDrop, writeRowsWithIndexes et acceptDrop dans TableListCon
  • Appelé registerForDraggedTypes sur la sortie tableView.

Encore une fois, pas d'erreurs / avertissements, mais seule la méthode awakeFromNib semble être appelée (aucune des autres méthodes n'est appelée)

Était-ce utile?

La solution

NSTableView gère le glisser-déposer différemment des vues génériques, ce qui est globalement une bonne chose. Cela signifie que vous n'avez pas à gérer manuellement les comportements complexes de mise en évidence, de suivi de cellules et d'insertion requis par les tableaux.

Vous trouverez une description de ce qui est requis ici . Fondamentalement, vous appelez toujours -registerDraggedTypes: (généralement dans votre méthode -awakeFromNib) mais au lieu d'implémenter les méthodes NSDraggingDestination, vous implémentez les différentes méthodes de source de données associées au glisser-déposer, que vous pouvez trouver ici . Vous ne devriez pas avoir besoin de la sous-classe NSTableView pour implémenter le glisser-déposer de cette manière.

Notez que ce sont des méthodes de source de données. Vous devez relier la sortie dataSource de la vue table à la classe qui implémente ces méthodes pour pouvoir les appeler.

Autres conseils

En plus de ce que Boaz a dit, il semblerait que vous créiez une sous-classe NSTableView, puis que vous en fassiez une instance du délégué de NSTableView. Si vous envisagez de créer une sous-classe, cette sous-classe doit être utilisée à la place de NSTableView, et non en plus. De plus, il est presque toujours contraire à la préoccupation de voir un représentant être le délégué d’un autre objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top