コントローラにバインドされているIBにLabel(NSTextField)があります。 コントローラは、awakeFromNIB上で、ラベルのattributedStringValueに色付きテキストと1つまたは複数のリンクを含むように設定します。NSTextFieldの属性付き文字列がレンダリングで遅れる
ラベルが表示されたら、正しい文字列値が含まれていますが、フォーマットの一部が失われます。ラベルをクリックすると、正しい書式設定に更新されます。
は私が値を設定するためにこのコードを使用しています:
[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];
この例に基づくとを、あなたは赤と、デフォルトのラベルのフォントに着色された文字列が表示されます。 ラベルをクリックすると、フォントのサイズと顔が変わり、リンクが魔法のようにレンダリングされます。
文字列を初めて正しくレンダリングする方法はありますか?
:私は私のテキストフィールドのためにIBに設定していたフォントを一致NSFontオブジェクトを作成し、そのようにその属性を設定します文字列。これらのメソッドは、NSTextViewの 'NSTextStorage'のように文字列が変更を監視されている場合にのみ使用されます。 –
また、テキストフィールドがコントローラに「バインド」されているとします。 「束縛」という言葉の使用は、あなたがココアの束縛を使用していることを意味しますが、テキストフィールドの値をプログラム的に設定するので、そうではないようです。テキストフィールドの 'attributedStringValue'バインディングは実際に何かに束縛されていますか? –
@RobKenigerこれは、「バインドされた」IBOutletです(そのための正しい用語は何ですか?) – d2kagw