2010-11-29 2 views
8

Я пытаюсь написать функцию «выделить» в NSTextView. В настоящее время все отлично работает. Вы выбираете диапазон текста, а цвет фона этого текста меняется на желтый. Тем не менее, в то время как он по-прежнему выбран, фон является стандартным синим выделенного текста. Как я могу сделать, чтобы этот стандартный цвет индикатора выбора не отображался в некоторых случаях?Изменение цвета выбора текста в NSTextView

Спасибо!

ответ

16

Использование -[NSTextView setSelectedTextAttributes:...].

Например:

[textView setSelectedTextAttributes: 
    [NSDictionary dictionaryWithObjectsAndKeys: 
     [NSColor blackColor], NSBackgroundColorAttributeName, 
     [NSColor whiteColor], NSForegroundColorAttributeName, 
     nil]]; 

Вы можете просто передать пустой словарь, если вы не хотите, выбор, указанный в любом случае на всех (короткое сокрытия точки вставки).

Другой вариант - следить за изменениями выбора и применять «выбор», используя temporary attributes. Обратите внимание, что временные атрибуты используются для отображения ошибок орфографии и грамматики и поиска результатов; поэтому, если вы заботитесь о сохранении этих функций NSTextView, убедитесь, что только добавьте и удалите временные атрибуты, а не замените их.

Примером этого является (в подклассе NSTextView):

- (void)setSelectedRanges:(NSArray *)ranges affinity:(NSSelectionAffinity)affinity stillSelecting:(BOOL)stillSelectingFlag; 
{ 
    NSArray *oldRanges = [self selectedRanges]; 
    for (NSValue *v in oldRanges) { 
     NSRange oldRange = [v rangeValue]; 
     if (oldRange.length > 0) 
      [[self layoutManager] removeTemporaryAttribute:NSBackgroundColorAttributeName forCharacterRange:oldRange]; 
    } 

    for (NSValue *v in ranges) { 
     NSRange range = [v rangeValue]; 
     if (range.length > 0) 
      [[self layoutManager] addTemporaryAttributes:[NSDictionary dictionaryWithObject:[NSColor blueColor] forKey:NSBackgroundColorAttributeName] 
             forCharacterRange:range]; 
    } 

    [super setSelectedRanges:ranges affinity:affinity stillSelecting:stillSelectingFlag]; 
} 
+0

Установив цвет фона clearColor, подсветка работает только после того, как весь выбор будет завершен. Как я могу применить эти атрибуты по мере выбора? – DexterW 2010-11-29 06:34:36

Смежные вопросы