NSSegmentedControl (подкласс NSSegmentCell) Цвет текста

Я создаю NSSegmentedControl как несколько значков для Sourcelist. Первый сегмент имеет зеленый цвет и показывает количество элементов, соответствующих разным правилам. Второй сегмент имеет красный цвет и подсчитывает непревзойденные правила. NSSegmentedControl отключен, поэтому пользователь не может щелкнуть по нему. Цвет текста серый, потому что он отключен.

Как я могу изменить цвет текста? Я попытался установить цвет в подклассе NSSegmentCell с помощью метода setAttributedStringValue:, но он не работает.

[self setAttributedStringValue:string];

person Konobi    schedule 14.10.2013    source источник


Ответы (1)


Я не уверен, что эта информация будет вам чем-то полезна, но если вы все еще ищете ответы…

Чтобы установить цвет текста строки с атрибутами, вы должны добавить объект NSColor в словарь атрибутов строки с атрибутами с ключом NSForegroundColorAttributeName. Я покажу вам несколько способов, которые я знаю, как это сделать.

Создание атрибутивной строки из объекта NSString:

NSDictionary *attrs = @{NSForegroundColorAttributeName:[NSColor redColor]};
NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:@"Hello"
                                                              attributes:attrs];

Из существующего объекта NSAttributedString:

NSMutableAttributedString *tempAttributedString = anExistingAttributedString.mutableCopy;
[tempAttributedString addAttribute:NSForegroundColorAttributeName 
                             value:[NSColor redColor] 
                             range:NSMakeRange(0, tempAttributedString.length)];
anExistingAttributedString = tempAttributedString;

Таким образом, в подклассе вы, вероятно, захотите перехватить значение, переданное -setAttributedStringValue:, следующим образом:

- (void)setAttributedStringValue:(NSAttributedString *)attributedStringValue
{
    NSMutableAttributedString *temp = attributedStringValue.mutableCopy;
    [temp addAttribute:NSForegroundColorAttributeName 
                 value:[NSColor redColor] 
                 range:NSMakeRange(0, temp.length)];
    [super setAttributedStringValue:temp];
}

Это может быть или не быть лучшим способом решения проблем, но поскольку информации о подклассах так мало, мне кажется, что это хорошая ставка. Если вы все это уже знаете, прошу прощения за многословный ответ. Если вы этого не сделаете, надеюсь, это поможет! Удачи.

person Ben Stock    schedule 26.05.2014
comment
Это не работает для NSSegmentControl (или NSSegmentCell), вероятно, потому что NSSegmentControl не использует одно строковое значение, а строковые значения для каждого сегмента, и существует setLabel: forSegment: нет версии, которая принимает NSAttributedString. - person Nathan Day; 24.11.2015