Cocoa でリストを表示するためには、通常 NSTableView というクラスを使います。
NSTableView のサブクラスで、項目の折りたたみをサポートした NSOutlineView というクラスがあるのですが、実は折りたたみのサポート以外の機能も追加されています。たとえば、NSOutlineView クラスだと、現在選択されている行に対応するオブジェクトを直接取得できるのですが (itemAtRow:)、NSTableView クラスでは、行とオブジェクトの対応付けを自分で管理しなければいけません。
ということで、項目の折りたたみをサポートしないとしても、始めから NSOutlineView クラスを使っておく方がラクだなと思う昨今。
NSTableView や NSOutlineView といえば、最近の Cocooa では、NSArrayController や NSTreeController といったコントローラクラスで、かなりお手軽にリスト表示や項目検索を実装できるようになりました。しかし、ちょっと手の込んだコトをしたいと思った場合には、実はデータソースと delegate を設定する旧来の方式の方が細かいところまで簡単に手を入れられます。コントローラクラスは自動的にいろんな面倒を見てくれる反面、細かな制御をしようとすると、コントローラクラスについてかなり詳しく勉強しなければいけないのです。
人間が直感的に「正しい」と感じる動作は、非線形であることが多く、コントローラクラスのように線形な自動化された動作は UI 屋さんとしては許せないことも多い。こちらも、時間が許すのであれば、データソースと delegate で実装したいところですね。
コメントを書く