2

データソースを備えたNSComboBoxがあり、三角形をクリックしてアイテムの1つをクリックすると、完全に機能します。ただし、ユーザーがボックスに入力してオートコンプリートを使用して名前を選択できるようにすることも必要です。現在、ユーザーが入力すると、選択したいアイテムがオートコンプリートされますが、選択されません。

ユーザーがコンボボックスに入力して選択アイテム名がオートコンプリートされたときに、コンボボックスを終了するとメソッドが実行され、ポップアップリストから同じ名前のアイテムが選択されるように、委任メソッドを実装する必要があると考えました。

私はこの委任方法を実装しました:

- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor {

    NSString *tempString = [outletPerformanceVenue stringValue];

    NSLog(@"New Value = %@",tempString);

    [outletPerformanceVenue selectItemWithObjectValue:tempString];

    return TRUE;
}

ただし、次のコンパイラエラーが発生しました。

*** -[NSComboBoxCell selectItemWithObjectValue:] should not be called when usesDataSource is set to YES

かなり簡単に思えますが、疑問に思います...アイテムを選択するための最良の方法は何でしょうか?この名前を含むデータソース配列内のレコードのインデックスを決定してから、同じインデックスを使用してコンボボックスアイテムを選択する必要がありますか?それとももっと直接的な方法がありますか?

*編集*

より単純でより直接的な質問は次のようになります。

ユーザーが(プルダウンリストから選択するのではなく)アイテムの名前をコンボボックスに入力した場合。データソースを使用しているときに、コンボボックスからそのアイテムのインデックスを取得するにはどうすればよいですか?

怪我に侮辱を加えるために、Appleのドキュメントには、selectItemWithObjectValue:は内部または外部のデータソースで機能する必要があると書かれています...ここで:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ComboBox/Tasks/SettingComboBoxValue.html

4

1 に答える 1

4

簡単な答え:本当に文字列を使用したい場合は、selectItemAtIndexメソッドを使用するか、(NSComboBox は NSTextField から継承されます) を呼び出します。setStringValue:

完全を期すために、関連するが少し異なる問題のためにここに来ました。

コンボボックスの作成方法を説明します。これがあなたの状況に当てはまるかどうかはわかりませんが、誰かの助けになることを願っています.

補完を機能させるために DataSource メソッドを実装しましたが、実際に値を設定する作業はバインディングに任せました。こうすることで、Return キーを押すと項目がオプションの 1 つにオートコンプリートされるか、オートコンプリートが利用できない場合は新しい値が作成されます。バインディングは、値の設定と取得を処理するだけです。

于 2013-04-22T12:40:13.890 に答える