这个问题很久以前就被问过了,但它仍然相关,特别是因为苹果文档没有很清楚地说明Swift多格式UIPasteboard API。在努力找出如何进行多格式复制和粘贴之后,我想分享我的解决方案,以防有人需要。在我的情况下,我需要支持一个内部格式(包含所有详细信息),以及图像和文本版本,以便粘贴到其他应用程序中。
首先,您需要获取UTI常量的访问权限 - 如果不在文件顶部添加此内容,则会得到未解析的符号:
```import MobileCoreServices```
然后定义您的格式UTI:
```let my_private_uti = "com.mydomain.myapp.myformat"```
以下是示例多格式复制的代码(在我的情况下是音乐程序):
externalRepresentation = "[A7]"
internalRepresentation = "A7:0 0 2 0 2 0"
image = UIImage()
let pasteboard =
[ [kUTTypeUTF8PlainText as String : externalRepresentation],
[kUTTypePNG as String: UIImagePNGRepresentation(image!)!],
[my_private_uti: internalRepresentation]]
UIPasteboard.general.setItems(pasteboard)
接下来是粘贴板操作。如果我的内部格式可用,我希望能够接受它,并在不可用时处理文本。(请勿在我的情况下使用图形格式。)
if let pastedata = UIPasteboard.general.data(forPasteboardType:my_private_uti, inItemSet:nil) {
if pastedata.count > 0 {
if let ourformat = String(data: pastedata[0] as! Data, encoding: .utf8) {
print("Pasted internal representation: \(ourformat)")
return
}
}
}
if let pastedata = UIPasteboard.general.data(forPasteboardType:kUTTypeUTF8PlainText as String, inItemSet:nil) {
if pastedata.count > 0 {
if let textformat = String(data: pastedata[0] as! Data, encoding: .utf8) {
print("Pasted external representation: \(textformat)")
return
}
}
}