2012-06-25 12 views
5

NSTextFieldのブール値enabledプロパティをNSButtonの状態にバインドしたいとします。私は既にの状態をNSNumberに変換するカスタムNSValueTransformerを追加しようとしました。ただし、そのシナリオでは、テキストフィールドは何らかの理由で常に無効になっています。私の第2のアプローチ:NSValueTransformerにはBOOLのようなリターンプリミティブタイプがないので、悪いことにも失敗します。Cocoa:ブール値プロパティをNSCellStateValueにバインドする方法は?

例:
スクリーンショットチェックボックスが状態NSOnStateを有するので、テキストフィールドが無効である例を示しています。私はまたラベルをこの状態に束縛したいと思う。私はInterface Builderのに "無効な文字" を設定することができれば

Disabled text fields

さらに、それは、便利です。上記の例では、関連するクラスにテキストを設定します。


編集:

私はアカウントのテキストフィールドのプロパティを有効にためモデルキーパスとしてself.anonymousLoginCheckbox.stateを設定します。パスワードテキストフィールドと同様です。ただし、ではなく、の仕事をしています。

Interface Builder Binding


更新:

私は親切ニコラスBachschmidtによって記述example project available on GitHub showing the implementationを作成しました。

答えて

13

NSButtonは、キーstateのKVOに準拠していません。 Cocoa Bindingsでは、監視対象のプロパティが変更されたときに、監視対象オブジェクトに通知を送信する必要があります。 NSButtonstateは、セルのstateのラッパーにすぎないため、ユーザーがボタンをクリックしたとき(ただし-[NSCell setState:]の場合)は-[NSButton setState:]メソッド(および自動KVO通知)は呼び出されません。モデルのキーパスをself.anonymousLoginCheckbox.cell.stateに設定すると、それが機能します。

関連する問題