如何在NSTextView中设置所有文本的颜色(而不仅仅是之后输入的文本)

时间:2011-11-16 09:53:18

标签: macos cocoa colors nstextview

我想更改NSTextView中所有文本的颜色。 目前,我有代码这样做:

NSMutableDictionary* fontAttributes = [[NSMutableDictionary alloc] init];
[fontAttributes setObject: newColour forKey:NSForegroundColorAttributeName];
[self setTypingAttributes:fontAttributes];  

...但只会更改设置属性后键入的文本的颜色。

是否有一种简单的方法可以更改视图中所有文本的颜色,而不仅仅是在插入点处输入的内容?

3 个答案:

答案 0 :(得分:13)

[textView setTextColor:newColor];

您可能没有注意到该方法,因为它实际上是NSText的一部分,NSTextView从该NSText继承。

答案 1 :(得分:2)

您需要设置文本视图的NSForegroundColorAttributeName对象的NSTextStorage属性:

NSTextStorage* textViewContent = [textView textStorage];

//get the range of the entire run of text
NSRange area = NSMakeRange(0, [textStorage length]);

//remove existing coloring
[textStorage removeAttribute:NSForegroundColorAttributeName range:area];

//add new coloring
[textStorage addAttribute:NSForegroundColorAttributeName 
                    value:[NSColor yellowColor] 
                    range:area];

答案 2 :(得分:0)

这是使用文本存储快速完成此操作的方法。您可以使用此方法为文本视图设置任何属性

if let textStorage = textView.textStorage {
    let area = NSRange(location: 0, length: textStorage.length)
    textStorage.removeAttribute(.foregroundColor, range: area)
    textStorage.addAttribute(.foregroundColor, value: NSColor.yellow, range: area)
}