9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NSTableViewにカスタムセルを使用する

Posted at

NSTableViewにNSTableCellViewを継承して作ったカスタムセルを表示する方法のメモ。
とりあえず2通りの方法があるようです。もしかしたらもっとあるのかもしれません。

  1. チュートリアルなどで、よく見かける方法。
  2. 正攻法(たぶん)。

チュートリアルなどで、よく見かける方法

NSTableViewDataSourceプロトコルのメソッドを実装します。
単純なテーブルを実装する場合によく見かけますが、
カスタムセルを使う際は使われていないようです。

func tableView(tableView: NSTableView!, objectValueForTableColumn tableColumn: NSTableColumn!, row: Int) -> AnyObject!

こちらでは、下記の動作になります。※推測含む

  1. メソッド内で自分でセルを作る(セルA)
  2. 内部的にセルが作られる(セルB)
  3. セルB のsetObjectValueに セルA が渡される
  4. セルA は破棄されて セルB が使われる

setObjectValueを実装していないとまっさらなセルが表示されます。
リファレンスに書いてあるんでしょうか、見つけられなくてすごくハマりました。

正攻法(たぶん)

NSTableViewDelegateプロトコルのメソッドを実装します。
1つ目の方法と似ていますが、プロトコルと第二引数と戻り値が違います。

func tableView(tableView: NSTableView!, viewForTableColumn tableColumn: NSTableColumn!, row: Int) -> NSView!

こちらでは、下記の動作になります。

  1. 関数内で自分でセルを作る(セルA)
  2. セルA がそのまま使われる

Web上で公開されているTipsなどではコチラがよく使われていますが、
私はしばらく違いに気づきませんでした。

まとめ

こういう時は引数名を確認↓
「コピペすると動くけど、手打ちだと(うっかり見慣れたメソッドを使ってしまって)動作が変わった」

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?