NSCell には面白いメソッドが用意されていて、マウスをセルの上に持っていった時にポップアップでセルの内容を表示することができる。
expansionFrameWithFrame:inView:
Returns the expansion cell frame for the receiver.
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.
Mac Dev Center: NSCell Class Reference
デフォルトではこのメソッドから -[drawWithFrame:inView:] が呼び出される。