Estoy tratando de implementar arrastrar y soltar desde el Finder en una NSTableView de mi aplicación. La configuración usa un NSTableView
, un controlador de matriz que actúa como un origen de datos utilizando enlaces Cocoa a un almacén de datos centrales.NSTableView y arrastre y suelte desde Finder
hice lo siguiente, siguiendo básicamente diferentes entradas del blog he encontrado en SO y otros sitios:
En el awakeFromNib
de mi controlador de vista que llamo:
[[self sourcesTableView] registerForDraggedTypes:[NSArray arrayWithObjects: NSPasteboardTypePNG, nil]];
I subclases NSArrayController y añade la siguiente métodos para mi subclase (el razonamiento para crear subclases es que el controlador de matriz necesita ser informado de la caída ya que actúa como fuente de datos de la vista de tabla):
- (BOOL) tableView: (NSTableView *) aTableView acceptDrop: (id <NSDraggingInfo>) info row: (NSInteger) row dropOperation: (NSTableViewDropOperation)operation
Mi implementación para lo anterior solo se escribe actualmente en el registro y luego devuelve un SÍ booleano.
- (NSDragOperation) tableView: (NSTableView *) aTableView validateDrop: (id <NSDraggingInfo>) info proposedRow: (NSInteger) row proposedDropOperation: (NSTableViewDropOperation) operation
En IB tengo el controlador de matriz apuntando a mi subclase personalizada NSArrayController.
Resultado: nada. Cuando arrastro un PNG desde el escritorio a mi vista de tabla, no pasa nada y el archivo rebota felizmente en su origen. Debo estar haciendo algo mal, pero no entiendo qué. ¿Dónde estoy equivocado?
Gracias, pero la vista de tabla todavía no acepta ninguna acción de arrastrar/soltar. Cualquier archivo que arrastre del Finder rebota ... Sí uso enlaces Cocoa para adjuntar la tabla a su fuente de datos. – Roger
He actualizado mi respuesta. Aún necesita implementar un objeto de fuente de datos. –