如何在应用程序中从Finder拖放文件时获取文件名

时间:2015-10-28 09:17:54

标签: swift cocoa drag-and-drop

我试图让我的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,但无济于事。

此外,应用沙盒已关闭。

我希望有人可以帮助我: - )

2 个答案:

答案 0 :(得分:2)

我发现了问题所在。

我的NSView将NSImageViews作为子视图,这些阻止了拖动操作。 我在顶部添加了一个不可见的NSView子视图,并在该视图上注册了拖动操作。现在一切正常。

答案 1 :(得分:0)

您可以尝试在项目的Info plist中允许/添加所需的文件类型吗?

example info plist file

我认为您需要定义允许应用程序打开/处理的文件类型,但不能100%确定这是否与拖放有关。值得一试至少。