nspopupbuttoncellを描画するときに手動で強調表示するにはどうすればよいですか(黒ではなく白を使用して描く)?
-
18-09-2019 - |
質問
いくつかのセルから構成されたカスタムセルがありますが、そのうちの1つはnspopupbuttoncellです。
カスタムセルを強調表示すると、すべてのサブセルも強調表示されます(通常は白くなることによって)。
たとえば、nstextcellで、私が電話した場合 setHighlighted:YES
電話する前に drawWithFrame:inView
セルは、私が望むように、白いテキストで描かれます。
これは、nspopupbuttoncellsでは機能しません。テキストは黒として引き続き描かれ続けています。
nspopupbuttoncellをnstableviewのハイライトに適切にドロップするため、これが可能であるように思われます。
誰かがこれを修正するために私を正しい方向に向けることができますか?
解決
このCustom+Composite Nscellサブクラスはどこでホストしていますか?
- 強調されたもの:はい、あなたが探しているものではありません。ドキュメントから:
デフォルトでは、この方法は何もしません。 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でホストしている場合、選択した行の正しい背景を取得するのに十分なはずです。
これを独自の見解でホストしている場合は、追加の作業を行う必要がある場合があります。 (そして、アドバイスを提供する前に、ホスト環境に関する追加の詳細を提供する必要があります。)