【问题标题】:How to get filenames when you drag'n'drop files from Finder on your app从应用程序上的 Finder 拖放文件时如何获取文件名
【发布时间】:2015-10-28 09:17:53
【问题描述】:

我正在尝试让我的 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 )

}

如果我打印出注册的DraggedTypes,我会得到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,但无济于事。

此外,应用沙盒功能已关闭。

希望有人能帮帮我:-)

【问题讨论】:

    标签: swift cocoa drag-and-drop


    【解决方案1】:

    我发现了问题所在。

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

    【讨论】:

      【解决方案2】:

      您能否尝试在项目的 Info plist 中允许/添加您想要的文件类型?

      example info plist file

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-16
        • 2010-09-09
        相关资源
        最近更新 更多