这个问题很久以前就被问过了,但它仍然是相关的——尤其是因为 Apple 文档没有使 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()
// fill image with chord diagram...
let pasteboard =
[ [kUTTypeUTF8PlainText as String : externalRepresentation],
[kUTTypePNG as String: UIImagePNGRepresentation(image!)!],
[my_private_uti: internalRepresentation]]
UIPasteboard.general.setItems(pasteboard)
现在是粘贴。如果可用,我想接受我的内部格式,如果不可用,我想回退到处理文本。(在我的情况下,不要对图形格式做任何事情。)
//Handle internal format
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) {
// Process ourformat string
print("Pasted internal representation: \(ourformat)")
return
}
}
}
// Handle plain text format
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) {
// Process normal text
print("Pasted external representation: \(textformat)")
return
}
}
}