我有带有一些图像和文本的富文本文件。在我的 Cocoa 应用程序中,我试图将该文件的内容放在该文件上,NSDragPboard
以便用户可以将内容拖到其他应用程序(TextEdit、Mail 等)中。
一个用例是这样的:富文本文件包含一个电子邮件模板,用户将内容拖到新的邮件中。
我试过这个没有成功:
NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
[pboard writeFileContents:filePath];
苹果文档是这样说的:
将文件 filename 的内容写入接收者,并声明数据的类型为 NSFileContentsPboardType以及适合文件扩展名的类型(由 NSCreateFileContentsPboardType 函数在传递文件扩展名时返回),如果它有一个。
在 ClipboardViewer 应用程序中,我可以看到一些数据类型,其中一种是NXFileContentsPboardType
. 但是,Mail 和 TextEdit 等应用程序不允许删除该数据类型。
当我手动(Control+C)将富文本内容复制到剪贴板时,我看到了我想要的所有不同数据类型:
public.rtf
public.utf8-plain-text
NSStringPboardType
- ...
那么我怎样才能自己以编程方式做到这一点呢?我是否必须弄清楚所有各种 UTI 类型并设置相应的数据?我以为那[pboard writeFileContents:path]
是为了...
谢谢,马克。
编辑:
取得进展...这适用于.rtf
文件,但不适用于.txt
文件:
NSString *uti = // helper code to get UTI from NSURL resource key...
NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
[pboard declareTypes:[NSArray arrayWithObject:uti] owner:nil];
[pboard setData:[NSData dataWithContentsOfFile:filePath] forType:uti];
对于.txt
文件,粘贴板上的数据类型是public.text
. 但是,TextEdit 和 Mail.app 不允许删除该类型。public.rtf
如果富文本工作正常...