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