4

我想将图像和文本(两者)复制到 UIPasteBoard。 是否可以同时复制文本和图像。

在这里我可以只复制图像或只复制文本。如何复制两者?

我的复制图像代码如下,

UIPasteboard *pasteBoard = [UIPasteboard pasteboardWithName:UIPasteboardNameGeneral create:NO];
pasteBoard.persistent = YES;
NSData *data = UIImagePNGRepresentation(newImage);
[pasteBoard setData:data forPasteboardType:(NSString *)kUTTypePNG]; 

提前致谢 !!!!!

4

5 回答 5

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];
于 2013-12-30T10:38:44.027 回答
4

您应该设置粘贴板的 items 属性-

参考资料中的项目描述是-

项目

粘贴板上的粘贴板项目。@property(nonatomic,copy) NSArray *items 讨论

该属性的值是一个字典数组。每个字典代表一个粘贴板项,键是表示类型,值是与该类型关联的数据对象或属性列表对象。设置此属性将替换所有当前粘贴板项目。

因此,您可以将两个字典添加到数组中,键值对为 & 并将此数组设置为 items 属性。

于 2011-10-05T11:40:14.797 回答
3

以我的经验,官方方式在 iOS 中根本行不通。不是为每个项目创建一个单独的字典并将它们添加到数组中(如文档中所述),而是将所有项目添加到单个字典中,然后使用该单个字典创建一个数组并将其设置到粘贴板。

像这样:

NSMutableDictionary * pasteboardDict = [NSMutableDictionary dictionary];
[pasteboardDict setObject:someData forKey:someUTIkey];
[pasteboardDict setObject:someOtherData forKey:someOtherUTIkey];
[[UIPasteboard generalPasteboard]setItems:[NSArray arrayWithObject:pasteboardDict]];
于 2012-11-05T18:59:56.323 回答
3

这个问题很久以前就被问过了,但它仍然是相关的——尤其是因为 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
        }
    }
}
于 2018-12-08T14:29:56.700 回答
2

似乎persistent在 iOS 中设置布尔值是没有意义的,来自 Apple:

iOS,公共(系统)粘贴板是持久的,但默认情况下私有(应用程序)粘贴板不是。当创建它们的应用程序退出时,这些私有粘贴板不会继续存在。但是,您可以将应用程序粘贴板标记为持久。

于 2016-01-15T16:13:50.510 回答