3

NSPanel内のNSTextViewにデフォルトのフォントと色を設定しました。

ただし、でビューをクリアするとsetString:@""、テキストが消えるだけでなく、デフォルトの色/フォントの書式もすべて消えます。

別の操作を行うsetStringと、テキストがデフォルトのフォントになり、再び黒になります。

誰かがそれがなぜであるか、そしてそれを改善するために私が何ができるかを説明できますか?

更新しました:

問題の助けと明確化に感謝します。setStringの後で、もう一度フォーマットすることになりました。

[self.txtLog setFont:[NSFont fontWithName:@"courier" size:12]];
[self.txtLog setTextColor:[NSColor colorWithSRGBRed:65.0/255 green:229.0/255 blue:235.0/255 alpha:1]];
4

1 に答える 1

4

これは、NSTextView をクリアして通常の (属性のない) 文字列を設定すると、フォントと色を含む書式設定が削除されるためです。

ほとんどの場合、HTML を使用して書式設定した属性付き文字列を設定します。とても便利だと思います。たとえば、色とフォントを設定するために使用する 2 つのマクロを次に示します。

#define color(string, color)   strAdd5(@"<font color=\"#",(color), @"\">", (string), @"</font>")
#define fontName(string, fontname) strAdd5(@"<span style=\"font-family: ",(fontname), @";\">", (string), @"</span>")
#define html2AttributedString(htmlString) [[[NSAttributedString alloc] initWithHTML:[(htmlString) dataUsingEncoding:NSUTF8StringEncoding]documentAttributes:NULL] autorelease]

次に、属性付きの文字列をテキスト ストレージに設定するだけです。

[textStorage setAttributedString:html2AttributedString(color(myNSString, @"FF0000"))]

またはNSTextViewのinsertTextを使用する

[textView insertText:html2AttributedString(fontName(myNSString, @"Courier New"))];

また、HTML を使用すると、センタリングやその他の多くのプロパティを含むすべてを定義できます。ただし、テキストを変換する前に、改行を < BR / > に変換する必要があります。

于 2013-03-08T22:43:00.657 に答える