NSAttributedString на NSCell - PullRequest
       35

NSAttributedString на NSCell

2 голосов
/ 05 июля 2011

Я заполняю NSOutlineView данными, которые я форматирую, используя NSAttributedString. Пока что я отформатировал шрифт, размер и цвет текста. Моя проблема в том, что цвет переднего плана не меняется при выборе строки. Если вы создаете NSTextFieldCell и устанавливаете цвет в disabledControlTextColor в Интерфейсном Разработчике, он работает нормально: когда он не выбран, он отображается как серый, а когда выбран белый, когда я программно устанавливаю этот цвет на определение приписанной строки, он всегда отображается как серый.

NSMutableAttributedString *result = [[[NSMutableAttributedString alloc] initWithString:value] autorelease];
NSDictionary *attributes = [[NSDictionary dictionaryWithObjectsAndKeys:
                                     [NSFont systemFontOfSize:[NSFont systemFontSize] -1], NSFontAttributeName, 
                                     [NSColor disabledControlTextColor], NSForegroundColorAttributeName, nil] retain];

[result addAttributes:attributes range:[value rangeOfString:value]];

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 07 июля 2011

При создании подкласса NSCell при установке значения текстового поля мы должны спросить, является ли ячейка выделенной, а затем установить цвет переднего плана текста.

NSString *titleValue = @"TEST";
NSMutableAttributedString *titleString = [[NSMutableAttributedString alloc] initWithString:titleValue];    
NSColor *color = [self isHighlighted] ? [NSColor whiteColor] : [NSColor blackColor];
NSDictionary *attributes = [[NSDictionary dictionaryWithObjectsAndKeys:
                                         [NSFont boldSystemFontOfSize:[NSFont systemFontSize] + 1], NSFontAttributeName, 
                                         color, NSForegroundColorAttributeName, nil] autorelease];
[titleString addAttributes:attributes range:[titleValue rangeOfString:titleValue]];
[self setAttributedStringValue:value];
0 голосов
/ 03 января 2013

используйте это в пользовательской ячейке, я попробовал все в интернете, и, наконец, ниже все заработало

- (void)updateCellDisplay {
  if (self.selected || self.highlighted) {
  self.nameLabel.textColor = [UIColor lightGrayColor];
  self.colorLabel.textColor = [UIColor lightGrayColor];
  }
  else {
   self.nameLabel.textColor = [UIColor blackColor];
   self.colorLabel.textColor = [UIColor blackColor];
  }
}

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
  [super setHighlighted:highlighted animated:animated];
  [self updateCellDisplay];
}

- (void) setSelected:(BOOL)selected animated:(BOOL)animated {
  [super setSelected:selected animated:animated];
  [self updateCellDisplay];
}
...