如何在绘制时手动高亮显示NSPopUpButtonCell(使用白色而不是黑色绘制它)?

时间:2009-07-22 00:12:05

标签: cocoa custom-controls nspopupbuttoncell

我有一个由几个单元格组成的自定义单元格,其中一个是NSPopUpButtonCell。

当我突出显示我的自定义单元格时,我想让所有子单元格也突出显示(通常是通过变白)。

使用例如NSTextCell,如果我在调用setHighlighted:YES之前调用drawWithFrame:inView,则将使用白色文本绘制单元格,完全符合我的要求。

这不适用于NSPopUpButtonCells。文字继续画成黑色。

似乎这应该是可能的,因为将NSPopUpButtonCell放入NSTableView正确地突出显示。

有人能指出我正确的方向来解决这个问题吗?

1 个答案:

答案 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中托管此复合单元格,则应该足以获得所选行的正确背景。

如果您在自己的视图中托管此内容,则可能需要执行其他操作。 (在我们提供建议之前,需要提供有关主机环境的其他详细信息。)