0

ユーザーがテキスト フィールドに入力できる NSTextField UI 要素があり、テキスト フィールドの下に「ライブ検索」として入力候補のリストをドロップダウンしたいと考えています。

ネイティブのテキスト補完インフラストラクチャを使用することを望んでいましたが、ユーザーが適切な補完を選択したときに、単にテキストを NSTextField に入れたくありません。ユーザーは、オブジェクトの文字列プロパティを検索して、NSArray 内の多くのカスタム オブジェクトの 1 つを実際に選択しています。彼らが選択するとき、私は彼らがどのオブジェクトを選択したかを知る必要があります.

選択された補完のインデックスを知る方法はありますか (そのため、配列内のそのインデックスからオブジェクトを取得できます)?

それとも、ネイティブ テキスト補完の使用を忘れて、テキスト フィールドの下にドロップダウンを入力して表示するだけでよいのでしょうか?

4

2 に答える 2

0

この状況でNSComboBoxを使用できますか? そしておそらくNSComboBoxCellをサブクラス化してオーバーライドします

- (NSString *)completedString:(NSString *)substring

選択したアイテムの変更を検出するために、 NSComboBox デリゲート プロトコルの変更を観察することもできます。

于 2012-06-23T19:53:14.550 に答える
0

最後に、NSTokenField が追加したいくつかの UI の外観のため、NSTokenField を使用しました。しかし、私が思いついた追加のトリック (以下) は、NSTextField でも機能する可能性があると思います。申し訳ありませんが、これは複雑です。

簡単に言えば、私が行ったことは、キーが NSTokenField の部分文字列の完全な補完であり、オブジェクトが補完文字列が表すカスタム オブジェクトである NSMutableDictionary (iVar) を生成することでした。つまり、カスタム補完文字列を生成し、それらを NSTokenFieldDelegate メソッドから返されるように NSArray に入れるtokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:とき、同時に、これらの補完のそれぞれとそれらが表すオブジェクトを、補完をキーとして NSMutableDictionary に詰め込みます。そしてオブジェクトを値として。

ユーザーが完了を「トークン化」すると (Return または Tab を押すことで -- トークン化する characterSet を変更したので、トークン化するのはこれだけです)、NSTokenFieldDelegate メソッドtokenField:representedObjectForEditingString:が呼び出されます。その中で、キーとして editString パラメーターを使用して、NSMutableDictionary からオブジェクトを取得できます。[dict objectForKey:editingString]

controlTextDidChange:辞書のトリックを使用して NSTokenField の代わりに NSTextField の補完で同じことを行うために、NSTextFieldDelegate メソッドでいくつかの論争を行うことは可能かもしれないと思いますが、それを行うには、完全な補完が必要になると思いますNSTextField で、stringValue を取得し、それをキーとして使用します。私の場合、テキスト フィールド全体を補完する必要はなかったので、NSTokenField のトークン化がうまく機能しました。

于 2012-06-29T22:33:04.883 に答える