我有一个由几个单元格组成的自定义单元格,其中一个是NSPopUpButtonCell。
当我突出显示我的自定义单元格时,我想让所有子单元格也突出显示(通常是通过变白)。
使用例如NSTextCell,如果我在调用setHighlighted:YES
之前调用drawWithFrame:inView
,则将使用白色文本绘制单元格,完全符合我的要求。
这不适用于NSPopUpButtonCells。文字继续画成黑色。
似乎这应该是可能的,因为将NSPopUpButtonCell放入NSTableView正确地突出显示。
有人能指出我正确的方向来解决这个问题吗?
答案 0 :(得分:1)
您在哪里托管此自定义+复合NSCell子类?
-setHighlighted:YES不是您要找的。来自文档:
默认情况下,此方法不执行任何操作。 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中托管此复合单元格,则应该足以获得所选行的正确背景。
如果您在自己的视图中托管此内容,则可能需要执行其他操作。 (在我们提供建议之前,需要提供有关主机环境的其他详细信息。)