4

私の人生の間、私は絶えず困惑していNSComboBoxます。

NSComboBoxDataSourceプロトコルに準拠するオブジェクトを作成し、次のように実装しました。

- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;

データソースを使用するようにインスタンスを設定し、NSComboBoxこのオブジェクトをソースとして設定しました。これはうまく機能します。私の実装はアイテムの数を返し、NSString特定のインデックスのアイテムの値を返します。

それから、何かが選択されたときに何かをしたいと思います。これが私の問題の始まりです。NSComboBoxDataSourceコンボボックス内のアイテムの選択を処理するためにプロトコルをオーバーライドする明確な方法はありません。

したがって、オブジェクトを次のように準拠させNSComboBoxDelegateて実装することもできます。

- (void)comboBoxSelectionDidChange:(NSNotification *)notification;

残念ながら、選択時とは異なりNSTableView、通知のオブジェクトはNSComboBox選択されたアイテムのオブジェクトではありません。「ファイン」私は自分自身に言います、私はNSComboBoxメソッドを呼び出します:

- (id)objectValueOfSelectedItem;

これにより、選択したアイテムが返され、そこから移動できます。ただし、そのメソッドは、usesDataSourceがに設定されている場合にのみ呼び出されNOます。これは私の場合ではありません。これを使うと警告が飛び出します。

だから、私の質問は、NSComboBoxデータソースを使用しているときに選択を処理する適切な方法は何ですか?

4

1 に答える 1

15

objectValueOfSelectedItemの代わりにindexOfSelectedItemが必要だと思います。comboBox:objectValueForItemAtIndex:次に、データソースであるため、独自のメソッドを呼び出すことができるはずです。

于 2009-11-11T02:22:00.637 に答える