コントローラーにバインドされたラベル(NSTextField)がIBにあります。コントローラは、awakeFromNIBで、ラベルのattributedStringValueに、色付きのテキストと1つまたは2つのリンクを含めるように設定します。
ラベルが表示されると、正しい文字列値が含まれていますが、一部のフォーマットは失われています。ラベルをクリックするまで、ラベルは更新されて正しいフォーマットが含まれています。
私はこのコードを使用して値を設定しています:
[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];
この例に基づいて、文字列が赤でデフォルトのラベルフォントで表示されます。次に、ラベルをクリックすると、フォントのサイズと面が変わり、リンクが魔法のようにレンダリングされます。
文字列を最初に正しくレンダリングする方法について何かアイデアはありますか?