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

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

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

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

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

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

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

1 Ответ

1 голос
/ 25 июля 2009

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

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

По умолчанию этот метод ничего не делает. Класс 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, этого должно быть достаточно для получения правильного фона для выбранных строк.

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

...