Как я могу установить цвет ВСЕГО текста в NSTextView (а не только текст, набранный впоследствии)

Я хочу изменить цвет ВСЕГО текста в NSTextView. В настоящее время у меня есть код, делающий это:

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

... но это только меняет цвет текста, набранного после установки атрибутов.

Есть ли простой способ изменить цвет всего текста в представлении, а не только того, что введено в InsertionPoint?


person Graham Lea    schedule 16.11.2011    source источник
comment
Это то поведение, которое я действительно искал :-)   -  person markhunte    schedule 13.03.2014


Ответы (3)


[textView setTextColor:newColor];

Возможно, вы не заметили этот метод, потому что на самом деле он является частью NSText, от которого наследуется NSTextView.

person Francis McGrew    schedule 16.11.2011
comment
Блестящий. Спасибо! Ты прав. Я просматривал документы NSTextView для «цвета», но когда я посмотрел на суперклассы, я подумал, что искал «передний план». (лицевая ладонь) - person Graham Lea; 16.11.2011
comment
Apple так чокнутая... Это foregroundColor, textColor, NSForegroundColorAttributeName или бог знает что еще... Клянусь.. меньше способов содрать шкуру с кота, чем изменить цвет шрифта.. За исключением того, что когда вы сдираете кожу с кота, вы знаете, что он мертв ... в отличие от выбора способа изменить цвет чертова шрифта, лол. - person Alex Gray; 17.05.2014

Вам нужно установить атрибут NSForegroundColorAttributeName объекта NSTextStorage текстового представления:

NSTextStorage* textStorage = [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];
person Rob Keniger    schedule 16.11.2011

Вот как это сделать быстро, используя textstorage. Вы можете установить любой атрибут для текстового представления, используя этот метод

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)
}
person Mirza Bilal    schedule 11.02.2020