アプリが選択されていない時は「ー」ボタンを Disable にしたい。
Outletでつないで制御するのも手だが、Cocoa Bindings を使えばもっと簡単にできる。今回表示データは NSArrayController で管理しているので、ここの値(メソッド)とボタンの Enabled との間でバインドできれば良さそうだ。状況としては、選択されているか、非選択のかの2つの状態が判断できればいい。
NSArrayController のリファレンスを眺めていると、そのものズバリのメソッドはなかったが -[NSArrayController selectionIndexes] が NSIndexSet を返すので、-[NSIndexSet count] をとれば 0(非選択)、0以外(選択)が取れそうだ。これを仕込んでみる。
Key Path に selectionIndexes.count と書けば、selectionIndexes、count と順番にメッセージを投げてくれる。
# もっといい方法があれば教えて欲しい。
- - - -
Cocoa Bindings は便利。
(追加)複数の方の指摘で -[NSObjectController canRemove] があることが判明。
NSObjectController Class Reference - canRemove
こちらの方が適切のようだ。実際期待通りの動作を確認しました。
指摘してくれた方々ありがとうございました。



3 コメント:
普段はROM専ですが、アプリが出来上がっていく過程が見れるのは面白いですね。
selectionIndexes.countとの機能的な違いがあるのかは解りませんが、Controller Keyのコンボボックスを開くとcanRemoveってのがありますよ。
NSObjectControllerにその名もズバリの「canRemove」がありますよ。私は大抵これを使っていますし、場合によってはこれをオーバーライドしています。ご参考になれば。
Makotorou さん、匿名の方、コメントをどうも。
canRemove 試しました。バッチリです。
親クラスを見ないなんて基礎的なところでポカしてましたね。
コメントを投稿