清除NSTextView颜色和字体后重置

时间:2013-03-08 21:07:13

标签: objective-c cocoa nstextview

我将一些默认字体和颜色设置为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]];

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;在转换文本之前。