2009-12-09 10 views
5

私はNSButtonとNSTableViewを含むNSWindowを持っています。NSTableViewの選択に基づいてバインディングでNSButtonを有効にする

テーブルが少なくとも1つのアイテムを含み、正確に1つのアイテムが選択されている場合にのみ、ボタンを有効にしたいと思います。 (この表では複数の選択ができません)

これを実現するために、ボタンの有効なバインディングをバインドすることはできますか?

+3

これは削除/削除]ボタンが有効になっている典型的な方法のような非常に多くの音。コントローラの-canRemoveプロパティへのバインディングは十分ですか? –

+1

アレイコントローラに切り替えることを検討しましたか?そんなことを簡単にする。 –

答えて

2

アレイコントローラのselectedObjects(モデルキーパスcount)にバリュートランスフォーマーを使用せずにバインドしてみてください。

複数の選択を許可した場合、これは安全ではないことに注意してください。countは簡単にYESでもNOでもありません。ユーザが256個のアイテムの倍数を選択した場合、カウントの最下位バイトは0になるので、選択があったとしてもの値はNOになります。 使用してアレイコントローラと

コントローラキーにボタンの有効状態をバインドします:

+1

私はどこにでもArrayControllerを持っていません。テーブルビューは、デリゲートとデータソースを使用します。 –

+4

次に、バインディングを使用するのは、この場合は少し意味がありますか?ボタンのコンセントを作成し、選択が変更されたときに(代理メッセージを使用して)その有効な状態を直接設定します。 –

+1

または、モデルに 'buttonEnabled'プロパティを作成し、それにバインドします。 'NSTableView'にバインドしたいのであれば、' -awakeFromNib'メソッドでバインドできます。 'enabled'プロパティはテーブルビューの' selectedRowIndexes.count'プロパティにバインドできます。 –

14

これは私の2セントですここに古いスレッドですが、selectedObjects モデルキーのパス:@count

作品罰金。

+0

ここにあるすべての情報のうち、これが私にとっては唯一のテクニックです。 –

+0

ありがとうございます。代わりに新しいブール値のプロパティを作成するコードを書くつもりでした:) –

+0

Table Viewの選択内容を、その内容だけでなくアレイコントローラにバインドすることを忘れないでください。 –

1

今日私はこの問題に遭遇しました。

何も「マスター表」に選択されていない場合は私のボタンを無効にする必要があります:私はに走った

問題:

  • は、実際のボタンではなく囲まれたボタン電池
  • NO = disabledを指定して使用します複数値の場合、選択なしなど
  • Enabledプロパティをマスターテーブルの選択にバインドし、存在するプロパティ(私の場合はcode)を使用します。
  • マスターテーブルで何かが選択されている場合は、トランスNSIsNotNilを使用してボタンを有効にします。

enter image description here