5

NSCellカスタム背景ハイライトを描画するためにサブクラス化しようとしています。ドキュメントは、オーバーライドによりこれを実行できるようにする必要があることを示唆しているhighlight:withFrame:inView:ようですが、メソッドは呼び出されません。

代わりに、どちらがうまく機能するかをオーバーライドdrawInteriorWithFrame:inView:しました。セルに必要なものを描画できます。ただし、問題は、自分ですべてを描画する必要があり、拡張しているタイプの NSCell の機能 (たとえば、テキストを表示する NSTextFieldCell の機能) が失われることです。

カスタム描画された強調表示されたセル:

ここに画像の説明を入力

ただし、背景 (ハイライト) を再描画し、拡張セルの主な機能を使用する機能を保持したいだけです。

ここに画像の説明を入力

もちろん、自分でテキストを描くこともできますが、これを行うより簡単な方法があることを願っています.

どんな助けでも大歓迎です。

4

1 に答える 1

11

@Bavariousの助けを借りて、私はなんとかそれを解決することができました。私の拡張NSTextFieldCellクラスの実装には、次のものが含まれています。

-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    return nil;
}

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    if ([self isHighlighted]) {
        // Draw highlight background here
    }

    [super drawInteriorWithFrame:cellFrame inView:controlView];
}

重要なのは、必ず戻っnilて背景の描画highlightColorWithFrame:inView:を停止drawInteriorWithFrame:inView:し、それでもメインコンテンツ(この場合はテキスト)を描画するために呼び出すことです。

于 2011-02-18T13:03:24.070 に答える