我想将图片和文字(两者)复制到UIPasteBoard。 是否可以同时复制文字和图片。
在这里,我只能复制图像或仅复制文本。 如何复制两者?
我的复制图像代码如下,
UIPasteboard *pasteBoard = [UIPasteboard pasteboardWithName:UIPasteboardNameGeneral create:NO];
pasteBoard.persistent = YES;
NSData *data = UIImagePNGRepresentation(newImage);
[pasteBoard setData:data forPasteboardType:(NSString *)kUTTypePNG];
提前致谢!!!!!
答案 0 :(得分:11)
这是我的代码,它在我的设备上完美运行。
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.persistent = NO;
NSMutableDictionary *text = [NSMutableDictionary dictionaryWithCapacity:1];
[text setValue:captionLabel.text forKey:(NSString *)kUTTypeUTF8PlainText];
NSMutableDictionary *image = [NSMutableDictionary dictionaryWithCapacity:1];
[image setValue:gratitudeImageView.image forKey:(NSString *)kUTTypePNG];
pasteboard.items = [NSArray arrayWithObjects:image,text, nil];
答案 1 :(得分:3)
您应该设置粘贴板的items属性 -
参考文献中的项目描述是 -
项
粘贴板上的粘贴板项目。 @属性(非原子,副本) NSArray *项目讨论
属性的值是一个字典数组。每本字典 表示粘贴板项目,键是表示 类型和数据对象或属性列表对象关联的值 那种类型。设置此属性将替换所有当前属性 粘贴板物品。
因此,您可以向数组中添加两个词典,键值对为&并将此数组设置为items属性。
答案 2 :(得分:2)
根据我的经验,官方方式根本不适用于iOS。不是为每个项目创建单独的字典并将其添加到数组中(如文档中所述),而是将所有项目添加到单个字典中,然后使用该单个字典创建一个数组并将其设置为粘贴板。
像这样:
NSMutableDictionary * pasteboardDict = [NSMutableDictionary dictionary];
[pasteboardDict setObject:someData forKey:someUTIkey];
[pasteboardDict setObject:someOtherData forKey:someOtherUTIkey];
[[UIPasteboard generalPasteboard]setItems:[NSArray arrayWithObject:pasteboardDict]];
答案 3 :(得分:2)
似乎在Apple中设置persistent
布尔值毫无意义,来自Apple:
iOS,公共(系统)粘贴板是持久的,但默认情况下私有(应用程序)粘贴板不是。 当创建它们的应用程序退出时,这些私有粘贴板不会继续存在。但是,您可以将应用程序粘贴板标记为持久性。
答案 4 :(得分:2)
这个问题是很久以前问的,但它仍然很重要-特别是因为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
}
}
}