如何将 folder/directory 项从 NSOutlineView 拖到 Finder 或 Xcode 等应用程序
How can I drag a folder/directory item from an NSOutlineView to an app like Finder or Xcode
我创建了一个大纲视图 table,它显示了我的磁盘(文件系统)层次结构,类似于来自 Apple 的示例:
现在我希望能够将 files/folders 从我的大纲视图拖到其他接受拖放的应用程序,如 Finder、Xcode、iTunes 等。
这些是我为 NSOu
的数据源实现的功能
let pb: NSPasteboard?
func outlineView(outlineView: NSOutlineView, writeItems items: [AnyObject], toPasteboard pasteboard: NSPasteboard) -> Bool {
var array = [NSURL]()
self.pb?.declareTypes([NSFilesPromisePboardType], owner: self)
if let fileItem = items[0] as? FileSystemItem {
let fileURL = NSURL(fileURLWithPath: fileItem.getFullPath()!)
array.append(fileURL)
self.pb?.addTypes([fileURL.pathExtension!], owner: nil)
self.pb?.writeObjects(array)
return true
}else {
return false
}
}
func outlineView(outlineView: NSOutlineView, namesOfPromisedFilesDroppedAtDestination dropDestination: NSURL, forDraggedItems items: [AnyObject]) -> [String] {
var names = [String]()
if let fileItem = items[0] as? FileSystemItem {
print(fileItem.getRelativePath())
names.append(fileItem.getRelativePath()!)
return names
}else {
return names
}
}
我目前在控制台中收到此错误
Looked for HFSPromises on the pasteboard, but found none.
最后这是我所拥有的截图 -
NSOutlineView showing file system
除非文件不存在并且您将在收件人指定的位置创建它,否则不要使用承诺。如果是单个文件,则使用 NSURLPboardType。对于多个文件,使用 NSFilenamesPboardType。
我创建了一个大纲视图 table,它显示了我的磁盘(文件系统)层次结构,类似于来自 Apple 的示例:
现在我希望能够将 files/folders 从我的大纲视图拖到其他接受拖放的应用程序,如 Finder、Xcode、iTunes 等。 这些是我为 NSOu
的数据源实现的功能let pb: NSPasteboard?
func outlineView(outlineView: NSOutlineView, writeItems items: [AnyObject], toPasteboard pasteboard: NSPasteboard) -> Bool {
var array = [NSURL]()
self.pb?.declareTypes([NSFilesPromisePboardType], owner: self)
if let fileItem = items[0] as? FileSystemItem {
let fileURL = NSURL(fileURLWithPath: fileItem.getFullPath()!)
array.append(fileURL)
self.pb?.addTypes([fileURL.pathExtension!], owner: nil)
self.pb?.writeObjects(array)
return true
}else {
return false
}
}
func outlineView(outlineView: NSOutlineView, namesOfPromisedFilesDroppedAtDestination dropDestination: NSURL, forDraggedItems items: [AnyObject]) -> [String] {
var names = [String]()
if let fileItem = items[0] as? FileSystemItem {
print(fileItem.getRelativePath())
names.append(fileItem.getRelativePath()!)
return names
}else {
return names
}
}
我目前在控制台中收到此错误
Looked for HFSPromises on the pasteboard, but found none.
最后这是我所拥有的截图 - NSOutlineView showing file system
除非文件不存在并且您将在收件人指定的位置创建它,否则不要使用承诺。如果是单个文件,则使用 NSURLPboardType。对于多个文件,使用 NSFilenamesPboardType。