ページ

2009年12月1日火曜日

NSTableView にカスタムビューを表示する (6)カスタムセルにモデルオブジェクトの内容を描画する

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

(前回)Cocoaの日々: NSTableView にカスタムビューを表示する (5)カスタムセルへ bindings経由でモデルオブジェクトを渡す

前回カスタムセルにモデルオブジェクトを渡すことができたので、今回はそれを描画してみる。

コーディング

一旦値が取得できれば描画は簡単。描画時に -[NSCell drawWithFrame:inView] が呼び出されるので、ここでモデルオブジェクトの内容をビューへ描けば良い。バンドル内の画像とタイトルを表示させてみた。

CustomCell.m

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
Homepage* homepage = [self objectValue];
NSImage* image = [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForImageResource:homepage.image]] autorelease];

[controlView lockFocus];
NSPoint p1 = cellFrame.origin;
p1.x += 5;
p1.y += 5 + [image size].height;
[image compositeToPoint:p1 operation:NSCompositeSourceOver];

NSPoint p2 = cellFrame.origin;
p2.x += 100;
p2.y += 20;
NSDictionary* attrs = [NSDictionary dictionary];
[homepage.title drawAtPoint:p2 withAttributes:attrs];
[controlView unlockFocus];
}


早速実行してみよう。


実行結果

出た。




ソースコード

githubからどうぞ。

CustomCell at 20091201 from xcatsan's SampleCode - GitHub


- - - -
描画できたのは良いがレイアウトをコードで書かなければならないのは大変だ。Interface Builder でデザインできると良いのだが。