Когда я вставляю форматированный текст в картон (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)];
Так что, если это вообще возможно, я думаю, что это возможно только путем запроса текущего приложения о текущем шрифте.
Вы можете попробовать добавить HTML в картотеку с помощью 'NSPasteboardTypeHTML', но я не совсем уверен, есть ли какая-либо возможность достичь вашей цели. –
Я начинаю подозревать, что это невозможно без какого-либо особо неприятного взлома. Большинство приложений, вероятно, не будут принимать HTML-формат, но это может стоить того. – kvance