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