我正试图在我的Mac应用程序中启动一个累赘。我希望拖动既提供本地UTI,也提供文件承诺,这样用户就可以将剪贴画拖到桌面上。
根据苹果的过时文件,实现这一目标的方法是:
dragPromisedFilesOfTypes:fromRect:source:slideBack:event:启动“承诺”拖动dragImage:at:offset:event:pasteboard:source:slideBack:添加额外的粘贴板类型问题在于,苹果已经用beginDraggingSession: ...and dragPromisedFilesOfTypes:取代了AppKit的...and方法,但似乎并没有这么称呼它。
现在做这件事最好的方法是什么?
发布于 2016-10-02 04:53:50
看来你得自己来履行诺言了。例如:
let writer = NSPasteboardItem()
// We can provide "MP3" data, and/or a "File promise"
writer.setDataProvider(
data_source,
forTypes: [ kUTTypeMP3, kPasteboardTypeFileURLPromise]
)
// If the receiver wants the "File promise", we'll
// be writing a "CAF file" for them
writer.setString( AVFileTypeCoreAudioFormat, forType: kPasteboardTypeFilePromiseContent )
let drag_item = NSDraggingItem( pasteboardWriter: writer )
let drag_session = self.beginDraggingSession( with: [drag_item], event: event, source: self )在本例中,我设置了一个正常的拖动,它可以立即提供一个MP3,或者提供一个CAF文件。
通过以这样的方式启动拖动,"namesOfPromisedFilesDropped:“将被调用,就像对"dragPromisedFilesOfTypes:”一样,但我们也有能力设置不承诺的内容。
编辑:感谢jnadeau指出macOS 10.12添加了"NSFilePromiseProvider“,这可能更简单。我需要支持10.10和10.11,但我提到这一点,以防其他人发现它有用。
https://stackoverflow.com/questions/39813425
复制相似问题