Как установить цвет текста элемента верхнего уровня NSOutlineView - PullRequest
0 голосов
/ 11 сентября 2018

Я использую один и тот же NSTableCellView как для верхнего уровня, так и для других предметов.Я устанавливаю цвет текста одинаково для всех элементов:

- (nullable NSView*) outlineView:(NSOutlineView *)outlineView viewForTableColumn:(nullable NSTableColumn *)tableColumn item:(id)item_;
{
    NSTableCellView *cell = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
    cell.textField.stringValue = @"hi";
    cell.textField.textColor = NSColor.redColor;
    return cell;
}

В результате элементы верхнего уровня имеют некоторый системный цвет - не красный.

enter image description here

Мой оставшийся соответствующий код:

- (BOOL) outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item_;
{
    return YES // only for the first item;
}

Я пытался создать подкласс NSTableHeaderCell, как советовали в других темах, но он не работает.

Вот как я пытаюсь изменить headerCells:

- (void) viewDidLoad;
{
    for (NSTableColumn *col in self.ov_sidebar.tableColumns) {
        col.headerCell = [NCTableHeaderCell_customizable new];
    }

    self.ov_sidebar.delegate = self;
    self.ov_sidebar.dataSource = self;
}

Но ни один из методов NCTableHeaderCell_customizable overiden не вызывается.Поэтому я думаю, что настраиваемые headerCells должны быть установлены другим способом.Скорее всего, это даже не правильный способ изменить цвет текста.

Есть ли у вас какие-либо подсказки, как правильно установить цвет текста для элементов верхнего уровня NSOutlineView?

Один из возможных вариантов при изменении«Highlight» из «Source List» в «None», тогда он показывает список следующим образом:

enter image description here

Он имеет правильный цвет шрифта, но нежелательное форматированиес раскрытием и фоном с границей.

Итак, я продолжу в том же духе и попытаюсь исправить это форматирование по мере необходимости, или есть решение с «Списком источников»?

1 Ответ

0 голосов
/ 11 сентября 2018

Вы почти у цели. Вы можете попробовать это.

for (NSTableColumn *col in self.ov_sidebar.tableColumns) {
    col.headerCell = [[MyTableHeaderCell alloc]initTextCell:@"hi"];
}

Всегда есть некоторые компромиссы, даже если вы непосредственно подкласс от NSTableHeaderCell.

  @interface MyTableHeaderCell : NSTableHeaderCell

  @end
  @implementation MyTableHeaderCell

  -(NSColor *) textColor{
   return NSColor.blueColor;
  }

 @end

Это работает и не рекомендуется, так как они не упомянуты в документации NSTableHeaderCell.

Я показываю простой способ достижения вашей цели.

В IB добавьте дополнительный TextField. и пометьте его 1001 или как хотите. Ваш первый - textField для cellView и не забудьте скрыть его в IB право! скрыть, но не удалять.

Затем измените код для ссылки на второе текстовое поле.

NSTableCellView *cell = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
NSTextField * field = (NSTextField * )[cell viewWithTag:1001];
field.stringValue = ((MyData *) item_).value;
field.textColor = NSColor.redColor;

return cell;

enter image description here

enter image description here

...