0

私は Cocoa を初めて使用し、Xcode 4.5 で通常の Cocoa デスクトップ アプリケーションを 1 つ開発しています。に値を表示する必要があり、NSComboBoxから取得する必要がありますが、 へのNSComboBoxバインディングを行うべきではないという制限がありますIBOutlet

配列コントローラーを使用する必要がある場合は、s を使用できますNSArrayControllerが、s とは併用できませんIBOutlet

sを使用せずにこのタスクを実行する方法を教えてくださいIBOutlet

IBOutlet次の理由により、 sを使用したくありません。

  1. コードを削減します: UI に 15 個のテキスト フィールドがあると仮定すると、15 個 IBOutletの が必要になります (小さなプロジェクトで作業している場合はそれを使用できますが、より大きなサイズのプロジェクトを実装すると、大量の が作成される可能性がありますIBOutlet。テキスト フィールドからの値へのアクセスを支援する以外には何もしません。

    ではなくバインディングを使用するとIBOutlet、UI の処理が簡単になります。たとえば、arrayController がリンクされたテーブルが 1 つあるとします。配列コントローラーでリンクした配列を変更すると自動的にtableViewに変更が反映されるので、わざわざtableViewを更新する必要はありませんIBOutlet. tableView に表示するデータが変更されるたびに。

  2. 開発者の負担を軽減: バインディングを使用すると、バインディング オブジェクトで発生した変更がすぐに UI に反映されるため、UI の更新について心配する必要がありません。

  3. わかりやすいコード: IBOutlets を不必要に使用すると、ビューを処理するコードを記述したり、ビューを更新したりすることになります。バインディングを使用すると自動的に更新されます。

私によると。バインディングを使用する場合の良い習慣。

IBOutlets 単純にコードの長さを増やします。

前もって感謝します...

4

2 に答える 2

1

バインドする手順:

  1. コンボ ボックスにバインドされる NSComboBox と NSTextField を描画します。

  2. コンボ ボックスで、Interface Builder から項目を追加します。

  3. コンボボックスを選択します。押したままNStextField Ctrl/label までドラッグし、 を選択します takeStringValueFrom

それでおしまい!!!

これで、ビルドして実行し、コンボ ボックスでの選択の変更がテキスト フィールドにも表示されることを確認できます。

于 2013-03-04T09:51:05.430 に答える
0

コンボ ボックスのデリゲートを設定して、comboBoxSelectionDidChange メソッドを処理する必要があります。

http://www.cocoabuilder.com/archive/cocoa/221619-detecting-when-nscombobox-text-changed-by-list.html

于 2013-03-05T21:20:47.407 に答える