[Mac] NSTableView - ヘッダのカスタマイズ [3] ハイライト処理

2011年1月26日水曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

[前回] Cocoaの日々: [Mac] NSTableView - ヘッダのカスタマイズ [2] グラデーション

前回までのコードだとヘッダを選択した時に元のスタイルの表示に戻ってしまう。
選択された時もちゃんと描画するように手を加える。こうなる。

選択時の状態は NSCell における hilighed 状態を指す。この時の描画メソッドは専用に用意されているのでこれをオーバライドする。
- (void)highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView *)controlView
;
描画内容は普通の状態の色(黒)を濃くしたものする。これらなら前回のコードに手を入れれば簡単にできる。前回までのメソッド _drawInrect: を拡張して hilighted:(BOOL)hilighted を追加する。
- (void)_drawInRect:(NSRect)rect hilighted:(BOOL)hilighted
{
 CGFloat delta = hilighted ? -0.1 : 0;
 NSArray* colorArray = [NSArray arrayWithObjects:
         [NSColor colorWithDeviceWhite:0.6+delta alpha:1.0],
         [NSColor colorWithDeviceWhite:0.3+delta alpha:1.0],
         [NSColor colorWithDeviceWhite:0.2+delta alpha:1.0],
         nil];
 NSGradient* gradient = [[NSGradient alloc] initWithColors:colorArray];
 [gradient drawInRect:rect angle:90.0];
           :
これを呼び出して終わり。
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
 [self _drawInRect:cellFrame hilighted:NO];
}

- (void)highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
 [self _drawInRect:cellFrame hilighted:YES];
}

ソースコード


GitHub からどうぞ。
CustomHeaderSample at 2011-01-25 from xcatsan/MacOSX-Sample-Code - GitHub

Responses

Leave a Response

人気の投稿(過去 30日間)