ページ

2009年12月19日土曜日

NSCell の内容をポップアップ表示する

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

NSCell には面白いメソッドが用意されていて、マウスをセルの上に持っていった時にポップアップでセルの内容を表示することができる。





expansionFrameWithFrame:inView:

Returns the expansion cell frame for the receiver.
- (NSRect)expansionFrameWithFrame:(NSRect)cellFrame inView:(NSView *)view


Mac Dev Center: NSCell Class Reference


サブクラスでオーバーライドしてポップアップ表示するセルのフレームを返すと、後は自動的にポップアップが表示される。

(例)少しづらした位置にセルよりも大きいサイズでポップアップを表示する。


- (NSRect)expansionFrameWithFrame:(NSRect)cellFrame inView:(NSView *)view
{
NSRect frame = cellFrame;
frame.origin.x += 20;
frame.origin.y -= 20;
frame.size.width = 440;
frame.size.height = 100;
return frame;
}


セルは小さいが、マウスを置いて数秒待つと。。



指定した位置、サイズでポップアップが表示される。




ポップアップ表示する内容は -[drawWithExpansionFrame:inView:] を使ってカスタマイズすることができる。


drawWithFrame:inView:

Draws the receiver’s border and then draws the interior of the cell.
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView


Mac Dev Center: NSCell Class Reference

デフォルトではこのメソッドから -[drawWithFrame:inView:] が呼び出される。