ページ

2010年5月7日金曜日

Cocoa Bindingsを使ったボタンの Disable

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

アプリが選択されていない時は「ー」ボタンを 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 コメント:

Makotorou さんのコメント...

普段はROM専ですが、アプリが出来上がっていく過程が見れるのは面白いですね。
selectionIndexes.countとの機能的な違いがあるのかは解りませんが、Controller Keyのコンボボックスを開くとcanRemoveってのがありますよ。

匿名 さんのコメント...

NSObjectControllerにその名もズバリの「canRemove」がありますよ。私は大抵これを使っていますし、場合によってはこれをオーバーライドしています。ご参考になれば。

xcatsan さんのコメント...

Makotorou さん、匿名の方、コメントをどうも。

canRemove 試しました。バッチリです。
親クラスを見ないなんて基礎的なところでポカしてましたね。