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