我试图让我的NSView接受你可以从Finder中拖放的文件。
我已经检查了文档(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DragandDrop/Tasks/acceptingdrags.html#//apple_ref/doc/uid/20000993-BABHHIHC),但唯一可行的是接受一滴字符串。
正如文档所说,我已经注册了可以删除的类型
func commonInit(){
let allowedDropTypes = [NSFilenamesPboardType]
registerForDraggedTypes( allowedDropTypes )
Swift.print( registeredDraggedTypes )
}
如果我打印出registeredDraggedTypes,我会得到NSFilenamesPboardType
。
我还实施了draggingEntered(sender)
override func draggingEntered(sender: NSDraggingInfo) -> NSDragOperation {
Swift.print("Dragging entered")
return sender.draggingSourceOperationMask()
}
prepareForDragOperation(sender)
和performDragOperation(sender)
override func prepareForDragOperation(sender: NSDraggingInfo) -> Bool {
Swift.print("Prepare for drag operation")
return true
}
override func performDragOperation(sender: NSDraggingInfo) -> Bool {
Swift.print("Perform for drag operation")
return true
}
如果我运行我的应用程序,我无法从我的应用程序中删除Finder中的任何文件。
当我将NSStringPboardType
添加到允许类型的数组中时,我可以在应用上拖动一段文字。如果我然后尝试将NSPDFPboardType
添加到数组并在应用程序上拖动pdf,它也不起作用。
我也尝试过使用UTI public.file-url
,但无济于事。
此外,应用沙盒已关闭。
我希望有人可以帮助我: - )
答案 0 :(得分:2)
我发现了问题所在。
我的NSView将NSImageViews作为子视图,这些阻止了拖动操作。 我在顶部添加了一个不可见的NSView子视图,并在该视图上注册了拖动操作。现在一切正常。
答案 1 :(得分:0)
您可以尝试在项目的Info plist中允许/添加所需的文件类型吗?
我认为您需要定义允许应用程序打开/处理的文件类型,但不能100%确定这是否与拖放有关。值得一试至少。