2

ビューベースでは、カスタムの行ビューとセル ビュー (およびNSTableViewのサブクラス) がプロパティ セットを取得するため、背景が明るいか、または主に暗いか (選択され、強調表示された行) がわかります。NSTableRowViewNSTableCellViewbackgroundStyle

これは、直接のサブビューにも渡されます。

現在、テーブル セル ビューのデフォルトのテキスト ラベルはこれに正しく反応するため、暗い背景では、テキストは適切な明るい色で描画されます。

ただし、NSTextField追加のテキストを提供するために追加された (Interface Builder でカスタム テキストの色を設定して) は、この規則に自動的には準拠しません。

API でテキスト フィールドを適切に動作させる簡単な方法はありますか、それともサブクラス化する必要がありますか?

4

2 に答える 2

5

drawRect をオーバーライドする代わりに、次のようにすることもできます。

- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {
    NSColor *textColor = (backgroundStyle == NSBackgroundStyleDark) ? [NSColor windowBackgroundColor] : [NSColor controlShadowColor];
    self.detailTextField.textColor = textColor;
    [super setBackgroundStyle:backgroundStyle];
}

ここも参照してください: http://gentlebytes.com/blog/2011/08/30/view-based-table-views-in-lion-part-1-of-2/

于 2012-07-09T12:30:01.150 に答える
3

NSTableCellView をサブクラス化し、drawRect を実装します。

- (void)drawRect:(NSRect)dirtyRect
{
    // Drawing code here.
    if (self.backgroundStyle == NSBackgroundStyleDark) {
        [yourTextFieldIVar setTextColor:[NSColor whiteColor]];
    } else if(self.backgroundStyle == NSBackgroundStyleLight) {
        [yourTextFieldIVar setTextColor:[NSColor blackColor]];
    }
}
于 2012-06-21T19:52:47.730 に答える