全局替换 NSPasteboard.generalPasteboard()

Globally replace NSPasteboard.generalPasteboard()

我希望 NSPasteboard.generalPasteboard() 暂时切换到我的应用使用 NSPasteboard.pasteboardWithUniqueName()

生成的自定义

因此,当用户在切换粘贴板时按下 Cmd+C/Cmd+V 时,将使用我应用的粘贴板,而不是一般的粘贴板。

有办法吗?

不,没有办法做到这一点。

如果您只想更改您自己的应用程序中的行为,您可以将 category/extension 添加到 NSPasteboard 以添加一种方法,returns 通用粘贴板或您应用的私人粘贴板。这至少将逻辑隔离到一个地方。在代码的其他地方,您将使用自定义方法而不是 +generalPasteboard.

如果您也想更改其他应用程序的行为,那您就没那么走运了。你试图实现的更高层次的目标是什么?为什么要更改粘贴板应用程序使用的内容?如果您对此进行解释,也许还有另一种方法可以实现该目标。

是的,有可能做到这一点。您需要创建自己的单身人士,例如customPasteboard 继承自 UIPasteboard,然后使用 swizzling generalPasteboard 你可以 return 你自己的单例。 请记住,对于命名粘贴板,从 iOS 开始然后 "persist" 属性 设置为 NO,这与一般粘贴板不同,它在每个会话中保存在内存中。