ホーム > Cocoa, Mac App, Objective-C > NSTableViewのcustomCell

NSTableViewのcustomCell

2010 年 11 月 12 日 コメントをどうぞ コメント

NSTableViewのセルについてかなり悩まされたのでメモしておく。

まず、Cocoa Touchと同様に

  • NSTableViewDataSource
  • NSTableViewDelegate

の2つのプロトコルがある。

Cocoa TouchではreuseIdentifierを使ってcellのインスタンスを再利用するようになっているが、CocoaではNSTableColumnにsetDataCell:したcellを再利用するようになる。

#pragma mark NSTableViewDataDelegate
- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    return [tableColumn dataCell];
}

注意したいのが、NSTableViewの各カラムで使用されるセルは再利用されるということ。つまり同じインスタンスを使い回している。
NSTextFieldCellやNSImageCellなどのtextやimageは列と行に対応したobjectValueをセットしてやる。
イメージやテキストを含んだcell(NSCell)はInterfaceBuilderで作れない。
NSCellを継承したCustomCellクラスを作りコードでtextやimageを描画してやる必要がある。また、cellはobjectValueを1つしか受け取れない。

- (id)tableView:objectValueForTableColumn:row:

id型で返すことになるのでAlbumオブジェクトのようなtitle, song等を含むオブジェクトを返してやる。
あとはCustomCellクラスでAlbunオブジェクトの情報を描画してやればいい。

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView

こんな感じ。

カテゴリー: Cocoa, Mac App, Objective-C タグ:
  1. コメントはまだありません。
  1. トラックバックはまだありません。