Когда я помещаю отформатированный текст в монтажную панель (NSRTFPboardType), он вставляется с сохранением всего форматирования. Но то, что я действительно хотел бы, это отбросить информацию о размере и размере шрифта, сохранив при этом вес, цвет и т. Д.
Согласно документам, NSAttributedString без информации о шрифтах по умолчанию будет иметь значение Helvetica 12. Это выглядит как тупик.
Я также могу генерировать текст по требованию, поэтому, если бы я мог найти шрифт в текущем элементе пользовательского интерфейса, я мог бы изменить текст, прежде чем он попадет в монтажную область. Я надеялся, что API специальных возможностей поможет с этим, но ни один из атрибутов, которые я могу найти в UIElementInspector, кажется, не имеет отношения к форматированию.
Есть идеи?
Вот тестовый пример. Он вставляется в Helvetica 12, хотя единственным атрибутом является зеленый цвет:
// Create the string with no attributes, and strip the font just in case.
NSMutableAttributedString *s = [[[NSMutableAttributedString alloc] initWithString:@"Hello green world!"] autorelease];
[s removeAttribute:NSFontAttributeName range:NSMakeRange(0, [s length])];
// Add a test attribute
[s addAttribute:NSForegroundColorAttributeName value:[NSColor greenColor] range:NSMakeRange(6, 5)];
// Generate RTF data
NSData *rtf = [s RTFFromRange:NSMakeRange(0, [s length]) documentAttributes:nil];
// Copy to pasteboard
NSPasteboard *pb = [NSPasteboard generalPasteboard];
[pb declareTypes:[NSArray arrayWithObject:NSRTFPboardType] owner:nil];
[pb setData:rtf forType:NSRTFPboardType];
Вот кое-что интересное. Если я попытаюсь сгенерировать самые простые необработанные RTF-данные, которые я смогу, с абсолютно без информации о шрифте , он все равно будет вставлен в Helvetica 12!
char *rawrtf = "{\\rtf1\\ansi\\ansicpg1252\n"
"Hello world.}";
NSData *rtf = [NSData dataWithBytes:rawrtf length:strlen(rawrtf)];
Так что, если это вообще возможно, я думаю, что это возможно только путем запроса текущего запущенного приложения о текущем шрифте.