[Mac] NSTableView - ヘッダのカスタマイズ [5] スクロールバーの上の四角〜cornerView

2011年1月28日金曜日 | Published in | 0 コメント

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

[前回]

cornerView とは?


NSTableView には cornerView というメソッドでビューを取得できる。このビューは何かというとスクロールバー上の四角のエリアにあるヤツを指す。
ヘッダをカスタマイズする場合はここの描画もカスタマイズ内容に合わせておいた方が良い(でないと上記のように色違いになってしまう)。

cornerView はカスタムビューを割り当てることができるのでボタンとして機能させることもできる。Xcodeで cornerView の活用例を見ることができる。
 


実装


今回はカスタムビュー CustomCornerView を作りこれを NSTableView へ割り当てた。
@interface CustomCornerView : NSView {

}

@end
描画コードは前回までの CustomHeaderCell の背景と同じなので、これをクラスメソッドとして切り出た後呼び出すようにした。
@interface CustomHeaderCell : NSTableHeaderCell {
   :
+ (void)drawBackgroundInRect:(NSRect)rect hilighted:(BOOL)hilighted;

@end
@implementation CustomCornerView

- (void)drawRect:(NSRect)dirtyRect {
 
 [CustomHeaderCell drawBackgroundInRect:self.bounds
         hilighted:NO];
}
  :
@end
なおセルが描画される NSTableHeaderView では上下反転(flipped)しているので、CustomCornerView も合わせておく。
- (BOOL)isFlipped
{
 return YES;
}
NSTableView への設定は初期化コード内で行う。
@implementation CustomTableView
   :
- (void)_setupCornerView
{
 NSView* cornerView = [self cornerView];
 CustomCornerView* newCornerView =
  [[CustomCornerView alloc] initWithFrame:cornerView.frame];
 [self setCornerView:newCornerView];
 [newCornerView release];
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
 self = [super initWithCoder:aDecoder];
 
 if (self) {
  [self _setupHeaderCell];
  [self _setupCornerView];
 }
 return self;
}
さて動かしてみよう。
出た。


ソースコード


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

Responses

Leave a Response

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