6

コントローラーにバインドされたラベル(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];

この例に基づいて、文字列が赤でデフォルトのラベルフォントで表示されます。次に、ラベルをクリックすると、フォントのサイズと面が変わり、リンクが魔法のようにレンダリングされます。

文字列を最初に正しくレンダリングする方法について何かアイデアはありますか?

4

2 に答える 2

5

私はこの同じ問題に遭遇しました。私が見つけた解決策は、属性付き文字列に NSFontAttributeName を明示的に設定することでした。IB でテキスト フィールドに設定したフォントに一致する NSFont オブジェクトを作成し、その属性を次のように設定しました。

NSFont *font = [NSFont fontWithName:@"Lucida Grande" size:(CGFloat)13.0];
[attrString addAttribute:NSFontAttributeName value:font range:range];
于 2012-10-12T16:46:17.650 に答える
0

私の知る限り、これは通常の AppKit の奇妙さです。

このカスタム クラスを使用して、テキスト フィールドをリンクとしてレンダリングすることに成功しました。インターフェイス ビルダーに追加し、属性付きの文字列値を通常のように設定するだけです。

DSClickableURLTextField

を使用するオプションもありますが、NSButtonそれは面倒ですが、追加の作業なしではハンド カーソルを取得できません。

于 2011-12-31T00:51:12.957 に答える