这是因为清除 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 />。