Строка с атрибутами NSTextField задерживается при рендеринге

У меня есть метка (NSTextField) в IB, привязанная к контроллеру. Контроллер на awakeFromNIB устанавливает attributedStringValue метки, чтобы она содержала цветной текст и ссылку или две.

Когда вы видите метку, она содержит правильное строковое значение, но некоторая часть форматирования теряется - до тех пор, пока вы не нажмете на метку, и она не обновится, чтобы содержать правильное форматирование.

Я использую этот код для установки значения:

[self.testTextField setAllowsEditingTextAttributes:YES];
[self.testTextField setSelectable:YES];
NSMutableAttributedString *linkString = [[NSMutableAttributedString alloc] initWithString:@"hit this "];

[linkString beginEditing];

NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:@"link"];
NSRange range = NSMakeRange(0, [attrString length]);

[attrString addAttribute:NSLinkAttributeName value:[[NSURL URLWithString:@"http://google.com"] absoluteString] range:range];
[attrString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlinePatternDot] range:range];
[attrString addAttribute:NSForegroundColorAttributeName value:[NSColor blackColor] range:range];
[linkString appendAttributedString:attrString];

[linkString appendAttributedString:[[NSAttributedString alloc] initWithString:@" to search"]];

[linkString addAttribute:NSForegroundColorAttributeName value:[NSColor redColor] range:NSMakeRange(0, [linkString length])];

[linkString endEditing];

[self.testTextField setAttributedStringValue:linkString];

В этом примере вы увидите, что строка окрашена в красный цвет и имеет шрифт Label по умолчанию. Затем, когда вы нажимаете на этикетку, шрифт меняет размер и лицо, и ссылка волшебным образом отображается.

Есть идеи, как добиться правильного рендеринга строки в первый раз?

6
задан d2kagw 30 December 2011 в 23:17
поделиться