テーブルビューの応用(4)セルにイメージ、ボタンを表示する
macOS Mojava 10.15.7 / Xcode 11.3.1 / Swift 5.0
![[image1.png]](image1.png)
イメージは、プロジェクトにバンドルしたイメージファイルから読み込み、ImegeViewオブジェクトとして表示する。ボタンをクリックしたら、イメージファイルをプレビューで開く。
デリゲートメソッド tableView( _: viewFor: row: ) の戻り値の型は NSViewクラスである。表の要素であるセルに、ボタンやイメージを表示するためには、単純に NSButtonオブジェクト、NSImegeViewオブジェクトを返せばよい。
NSTableViewオブジェクトを作成すると NSTableCellViewオブジェクトに必ず NSTextFieldオブジェクトが組み込まれることから分かるように、標準的な技法では、セルに表示するのは基本的に文字列であることを前提とする。
文字列以外の Viewオブジェクトを表示する場合、ここで紹介した方法が最適解かどうか分からないが、特に問題もなく動作しているので、これで良いのかなと思っている。方法もシンプルである。
CellViewオブジェクトを使い回すために、NSTableCellViewクラスのサブクラスを作成、NSButtonオブジェクトと NSImageオブジェクトをプロパティに追加し、オーバーライドした drawメソッドの中でそれぞれのオブジェクトを表示(draw)するという方法も試してみた。しかしながら、列幅が変わったときのサイズの調整など、コーディングがかなり面倒になり、完成は諦めたという経緯もある。