Sto cercando di implementare il trascinamento dal Finder in un NSTableView della mia app. L'installazione utilizza un NSTableView
, un controller di array che funge da origine dati utilizzando i collegamenti Cocoa a un archivio dati principale.NSTableView e drag and drop dal Finder
ho fatto la seguente, in fondo seguendo vari post sul blog che ho trovato su SO e altri siti:
Nel awakeFromNib
del mio controller della vista che io chiamo:
[[self sourcesTableView] registerForDraggedTypes:[NSArray arrayWithObjects: NSPasteboardTypePNG, nil]];
I sottoclasse NSArrayController e aggiunto il seguente metodi per la mia sottoclasse (il ragionamento per la sottoclasse è che il controller di array deve essere informato della caduta in quanto agisce come origine dati della vista tabella):
- (BOOL) tableView: (NSTableView *) aTableView acceptDrop: (id <NSDraggingInfo>) info row: (NSInteger) row dropOperation: (NSTableViewDropOperation)operation
La mia implementazione per quanto sopra attualmente scrive solo nel log e quindi restituisce un valore booleano YES.
- (NSDragOperation) tableView: (NSTableView *) aTableView validateDrop: (id <NSDraggingInfo>) info proposedRow: (NSInteger) row proposedDropOperation: (NSTableViewDropOperation) operation
In IB ho il controller di array che punta alla sottoclasse NSArrayController personalizzata.
Risultato: nulla. Quando trascino un PNG dal desktop sulla mia vista tabella, non accade nulla e il file torna felicemente alla sua origine. Devo fare qualcosa di sbagliato ma non capisco cosa. Dove sto andando male?
Grazie, ma la vista tabella continua a non accettare alcun trascinamento/rilascio. Qualsiasi file che trascino dal Finder rimbalza ... Io uso i binding Cocoa per collegare la tabella alla sua origine dati. – Roger
Ho aggiornato la mia risposta. È ancora necessario implementare un oggetto datasource. –