首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向Cocoa中的HFS承诺拖动中添加其他类型的Pasteboard?

如何向Cocoa中的HFS承诺拖动中添加其他类型的Pasteboard?
EN

Stack Overflow用户
提问于 2016-10-02 02:56:14
回答 1查看 515关注 0票数 2

我正试图在我的Mac应用程序中启动一个累赘。我希望拖动既提供本地UTI,也提供文件承诺,这样用户就可以将剪贴画拖到桌面上。

根据苹果的过时文件,实现这一目标的方法是:

  1. dragPromisedFilesOfTypes:fromRect:source:slideBack:event:启动“承诺”拖动
  2. 通过重写dragImage:at:offset:event:pasteboard:source:slideBack:添加额外的粘贴板类型

问题在于,苹果已经用beginDraggingSession: ...and dragPromisedFilesOfTypes:取代了AppKit的...and方法,但似乎并没有这么称呼它。

现在做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-10-02 04:53:50

看来你得自己来履行诺言了。例如:

代码语言:javascript
复制
    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,但我提到这一点,以防其他人发现它有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39813425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档