kanizaのブログ

コンピュータ、ソフトウェア、映画、音楽関連や家族のことなど、思いついたことを書きます。

NSArrayControllerにバインディングしたNSTableViewにドラッグ&ドロップ

Cocoaについて勉強したことのメモ。

NSTableViewのドラッグ&ドロップ処理は、dataSourceにtableView:acceptDrop:row:dropOperation:などのメソッドで記述できる。NSArrayControllerにバインディングしている場合、NSArrayControllerのサブクラスを作ってさっきのメソッドを実装しつつ、NSTableViewのdataSourceにそいつを設定する(このdataSourceの指定とバインディングは別)。

サブクラスはInterface BuilderのClassesペインで作れるけど、そのまま「Instanciate...」メニューでインスタンスを作ろうとしても、メニューが無効化されている。インスタンスを作るには、まずパレットからNSArrayControllerのインスタンスを作っておいて、そのインスペクタの「Custom Class」からサブクラスの名前を指定する。これについてはFAQにも出ている。

NSTableViewをドラッグ&ドロップの対象にするには registerForDraggedTypes で登録しないといけないので、このNSArrayControllerのawakeFromNibあたりで登録しておく。

NSTableViewのドラッグ&ドロップに対応したNSArrayControllerのサブクラスについてはGoogle Code Searchで出てくるMaxのソースが参考になる。