3

我为 NSPanel 内的 NSTextView 设置了一些默认字体和颜色。

但是,当我用 清除视图时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 格式化的属性字符串。我觉得非常方便。例如,这是我用来设置颜色和字体的两个宏:

#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 回答