Как вручную выделить NSPopUpButtonCell при его рисовании (нарисуйте его белым, а не черным)?

У меня есть пользовательская ячейка, состоящая из нескольких ячеек, одна из которых - NSPopUpButtonCell.

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

Например, с помощью NSTextCell, если я позвоню setHighlighted:YES перед звонком drawWithFrame:inView ячейка будет нарисована белым текстом, именно так, как я этого хочу.

Это не работает с NSPopUpButtonCells. Текст просто продолжает рисовать как черный.

Кажется, что это должно быть возможно, так как перетаскивание NSPopUpButtonCell в NSTableView правильно подсвечивается.

Может кто-нибудь указать мне правильное направление для исправления этого?

1 ответ

Решение

Где вы размещаете этот нестандартный + составной подкласс NSCell?

-setHighlighted: ДА не то, что вы ищете. Из документации:

По умолчанию этот метод ничего не делает. Класс NSButtonCell переопределяет этот метод, чтобы нарисовать кнопку с внешним видом, указанным NSCellLightsByBackground, NSCellLightsByContents или NSCellLightsByGray.

Обычно представление узла для ячейки устанавливает стиль фона ячейки, и ячейка будет использовать его во время рисования, чтобы отобразить себя соответствующим образом. Распространите стиль фона от главной ячейки до вложенных ячеек.

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
    NSRect textRect, popUpRect;
    NSDivideRect(cellFrame, &textRect, &popUpRect, NSWidth(cellFrame) / 2, NSMinXEdge);

    /* Draw the text cell (self) */
    [super drawInteriorWithFrame: textRect inView: controlView];

    /* Draw our compound popup cell - create & release every time drawn only in example */
    NSPopUpButtonCell *popUpCell = [[NSPopUpButtonCell alloc] initTextCell: @"popup title"];
    [popUpCell setBordered: NO];
    [popUpCell setBackgroundStyle: [self backgroundStyle]];
    [popUpCell drawWithFrame: popUpRect inView: controlView];
    [popUpCell release];
}

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

Если вы размещаете это по собственному усмотрению, вам может потребоваться дополнительная работа. (И необходимо предоставить дополнительную информацию о среде хоста, прежде чем мы сможем предложить совет.)

Другие вопросы по тегам