0

問題:TableViewカスタムの透明なヘッダーを作成しようとしていて、サブクラス内にNSTableHeaderViewandのサブクラスNSTableHeaderCellとオーバーライドされた-drawWithFrame:inViewandを作成しました。これらのメソッドは期待どおりに機能しますが、テーブルの列ヘッダーが最初に描画されるときのみです。ただし、ユーザーがテーブル ヘッダーをクリックすると、白い背景で再描画されます。具体的には、カスタム メソッドの実装を次に示します。-drawInteriorWithFrame:inViewNSTableHeaderCell

@interface MYTableHeaderCell : NSTableHeaderCell
@end

@implementation MYTableHeaderCell

-(void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView{
//[super drawWithFrame:cellFrame inView:controlView];
NSBezierPath *path = [NSBezierPath bezierPathWithRect:cellFrame];
NSColor *clearColor = [NSColor clearColor];
[clearColor setFill];
[path fill];
[self drawInteriorWithFrame:cellFrame inView:controlView];
}

-(void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView{
//[super drawInteriorWithFrame:cellFrame inView:controlView];
NSBezierPath *path = [NSBezierPath bezierPathWithRect:cellFrame];
NSColor *clearColor = [NSColor clearColor];
[clearColor setFill];
[path fill];
NSRect titleRect = [self titleRectForBounds:cellFrame];
[self.attributedStringValue drawInRect:titleRect];
}

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

-(BOOL)isOpaque{
return NO;
}

テーブル ビュー ヘッダーが最初に描画 されると、意図したとおりに背景が透明になります。 ただし、ヘッダーをクリックすると 、白い背景に再描画されます。

私が知る限り、テーブルビューのヘッダーをクリックした後

-drawInteriorWithFrame:inView: 

ヘッダーを描画する必要がある場合でも呼び出されます。でも、

-drawWithFrame:inView: 

ではありません。また、別のクラスがセル テキストの下に白いビューを描画しているようにも見えます。

NSTableHeaderCellNSTableHeaderViewクラスの説明をすべて調べましsuperclassesたが、白い背景が描かれている理由がわかりません。私は明らかに基本的な何かを欠いています。

質問:白いビューが描画される原因は何ですか?

4

1 に答える 1

0

highlight(flag: Bool, withFrame cellFrame: NSRect, inView controlView: NSView)

メソッドは実装されていません。このメソッドをオーバーライドし、そこで drawRect メソッドからコードをコピーします。これを行う必要があります。

于 2016-02-19T22:08:25.453 に答える