(前回)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 でデザインできると良いのだが。