我将一些默认字体和颜色设置为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]];
答案 0 :(得分:3)
这是因为清除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,您可以定义所有内容,包括居中和许多其他属性。但是,您必须将任何新行转换为&lt; BR /&gt;在转换文本之前。