簡體   English   中英

從應用程序的Finder拖放文件時如何獲取文件名

[英]How to get filenames when you drag'n'drop files from Finder on your app

我試圖讓我的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得到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 ,但無濟於事。

此外,應用程序沙箱功能也已關閉。

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

我發現了問題所在。

我的NSView將NSImageViews作為子視圖,這些視圖阻止了拖動操作。 我在頂部添加了一個不可見的NSView子視圖,並在該視圖上注冊了拖動操作。 現在一切正常。

您可以嘗試在項目的Info plist中允許/添加所需的文件類型嗎?

示例信息plist文件

我認為您需要定義允許應用程序打開/處理的文件類型,盡管不能100%確定這是否與拖放相關。 至少值得一試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM