gpt4 book ai didi

macos - 如何在 Cocoa 中将其他粘贴板类型添加到 HFS Promise Drag 中?

转载 作者:行者123 更新时间:2023-12-03 16:40:24 25 4
gpt4 key购买 nike

我正在尝试在我的 Mac 应用程序中启动拖动。我希望拖动功能既提供 native UTI,又提供文件 promise ,以便用户可以将剪辑拖动到桌面。

根据 Apple 的 obsolete documentation ,实现的方法是:

  1. 使用 dragPromisedFilesOfTypes:fromRect:source:slideBack:event: 启动“promise”拖动

  2. 通过覆盖 dragImage:at:offset:event:pasteboard:source:slideBack: 添加其他粘贴板类型

问题在于,Apple 此后将 AppKit 的 dragImage: 方法替换为 beginDraggingSession: ...并且 dragPromisedFilesOfTypes: 不会出现来调用它。

现在解决这个问题的最佳方法是什么?

最佳答案

所以看起来你必须自己设置 promise 。例如:

    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,或者 promise 提供 CAF 文件。

通过以这种方式启动拖动,“namesOfPromisedFilesDropped:”将被调用,就像“dragPromisedFilesOfTypes:”一样,但我们也可以设置非 promise 内容。

<小时/>

编辑:感谢 jnadeau 指出 macOS 10.12 添加了“NSFilePromiseProvider”,这可能更简单。我需要支持 10.10 和 10.11,但我提到这一点以防其他人发现它有用。

关于macos - 如何在 Cocoa 中将其他粘贴板类型添加到 HFS Promise Drag 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39813425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com