2009-07-22 6 views
1

私はいくつかのセルから構成されたカスタムセルを持っています。そのセルの1つはNSPopUpButtonCellです。NSPopUpButtonCellを手動でハイライト表示するにはどうすればいいですか(黒ではなく白で描画します)。

カスタムセルをハイライト表示するときに、すべてのサブセルをハイライト表示させたい(通常は白くする)ようにしたい。

たとえば、NSTextCellの場合、を呼び出す前にsetHighlighted:YESと呼んだ場合、セルは白いテキストで描画されます。

これはNSPopUpButtonCellsでは機能しません。テキストはそのまま黒として描き続けます。

NSTableViewにNSPopUpButtonCellをドロップすると正しく表示されるため、これが可能であるようです。

誰かがこれを修正するための正しい方向に私を指摘できますか?

答えて

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で、この複合セルをホストしている場合、それは選択された行の正しい背景を取得するのに十分であるべきです。

これを自分の視点でホストしている場合は、追加作業が必要な場合があります。 (アドバイスを提供する前に、ホスト環境に関する追加の詳細を提供する必要があります)

+0

これは私が必要としていたものです。 Jimに感謝します。 –

関連する問題