将NSAttributedString复制到粘贴板

时间:2010-04-05 21:50:08

标签: cocoa pasteboard nsattributedstring

全新的Cocoa,我正在试图弄清楚如何将NSAttributedString复制到粘贴板。我查看了文档并且不确定我是否应该使用NSPasteboardItem。

以下是我要复制常规NSString的内容:

NSPasteboard *pb = [NSPasteboard generalPasteboard];
NSArray *types = [NSArray arrayWithObjects:NSStringPboardType, nil];
[pb declareTypes:types owner:self];

[pb setString:@"asdfasdf" forType:NSStringPboardType];

如何设置NSAttributedString?

由于

3 个答案:

答案 0 :(得分:10)

从Snow Leopard开始,NSAttributedString(当由AppKit启动时)符合NSPasteboardWriting,所以你可以这样做:

[pb clearContents];
[pb writeObjects:arrayOfAttributedStrings];

如果您只想在粘贴板上放置一个属性字符串,则可以send NSArray an arrayWithObject: message

[从2013年开始编辑:或使用闪亮的新@[ myAttributedString ]语法。适用于任意数量的对象,尽管在这种情况下它们仍然需要符合NSPasteboardWriting。]

这也适用于NSString。在AppKit标题中搜索“NSPasteboardWriting”,找到支持它的所有标准Cocoa类。

答案 1 :(得分:6)

您需要NSRTFPboardType或NSRTFDPboardType以及粘贴板上的NSAttributedString的RTFFromRange:documentAttributes: / RTFDFromRange:documentAttributes:setData

答案 2 :(得分:1)

NSPasteboard *paste = [NSPasteboard generalPasteboard];  
[paste clearContents];      
[paste declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
NSMutableAttributedString *aString;// init some string
BOOL success =  [paste writeObjects:[NSArray arrayWithObject:aString]];