Je ne connais rien à C#, mais vous avez demandé une solution dans Swift ou Objective-C. Que je peux aider avec! Le dessous est rapide 4.
Tout d'abord, assurez-vous que votre ViewController
est la source de données de la vue de la table:
class ViewController: NSViewController, NSTableViewDataSource
Vous devrez également faire le lien soit en code ou en IB.
Vous devez ensuite définir votre vue de table en tant que source de déplacement. Choisissez l'opération que vous voulez, soit habituellement .move
ou .copy
:
tableView.setDraggingSourceOperationMask(.move, forLocal: false)
Cet exemple suppose que vous utilisez un ArrayController pour gérer le contenu de la tableView. Tu devrais vraiment l'être, cela facilite beaucoup de choses. En outre, cet exemple est pour faire glisser plusieurs fichiers. (Il fonctionnera pour un seul fichier, mais il existe d'autres approches si vous ne jamais vouloir faire glisser un.)
Dans votre classe ViewController, mettre en œuvre cette méthode:
func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {
var filePaths = [String]()
// Swift 4 hack--the FilenamesPboardType is missing
let NSFilenamesPboardTypeTemp = NSPasteboard.PasteboardType("NSFilenamesPboardType")
pboard.addTypes([NSFilenamesPboardTypeTemp], owner: nil)
if let audioFiles = audioFilesArrayController.arrangedObjects as? [AudioFile] {
for i in rowIndexes {
filePaths.append(audioFiles[i].Filepath)
}
}
pboard.setPropertyList(filePaths, forType: NSFilenamesPboardTypeTemp)
return true
}
Vous pouvez en apprendre davantage sur la NSFilenamesPboardTypeTemp
hack here.
Et c'est tout! Recompilez et vous devriez être capable de déplacer un ou plusieurs de vos fichiers en les faisant glisser vers une fenêtre du Finder. Simple. :-)