1

NSSearchFieldのデフォルトの動作よりもJQueryUIオートコンプリート( http://jqueryui.com/autocomplete/ )のように動作するオートコンプリートを使用して単純なNSTextFieldを実装しようとしています。2つの違いは、JQuery UIでは、テキストフィールドでアクティブになる前にユーザーが提案の1つを手動で選択する必要があるのに対し、NSメソッドでは最初の提案が自動的に選択されることです。

その理由は、私がユーザーに提供する提案のリストがテキストと一致するのではなく、関連するためです。たとえば、ユーザーが「app」と入力した場合、「apple」を提案する代わりに、「fruit」を提案します。残念ながら、デフォルトの動作では、最初の項目が自動的に選択された場合、テキストフィールドは提案されるとすぐに「フルーツ」に変わりますが、これは望ましい動作ではありません(ユーザーが「アプリ」のままにしておく必要があります) 「フルーツ」自体を選択します。

最初のアイテムが自動的に選択されないようにすることはできますか?私が見つけた最も近い解決策を以下に示します。テキストが上書きされるのを防ぎますが、リストは有効なエントリのリストであり、ユーザーが最初の項目として入力した内容を表示することで、項目がまったく選択されないようにします。入力が常に有効であることを誤って示します。つまり、オートコンプリートを使用して、エントリを高速化するだけでなく、入力を有効なエントリに制限しようとしています。

これまでに見つかった最も近い解決策: NSSearchFieldが最初のオートコンプリートリストエントリを使用して入力された文字列を上書きしないようにするにはどうすればよいですか?

4

1 に答える 1

1

私はこれを理解しました。最初に...

control:textView:completions:forPartialWordRange:indexOfSelectedItem: 

追加した:

*index = -1;

これは、オートコンプリートに何も選択しないように指示します(ここで説明されているように:NSTextViewクラスリファレンス

索引

入力では、デフォルト値が0の整数変数です。出力では、この値を、最初に選択する必要がある項目を示す、返された配列のインデックスに設定できます。値を-1に設定して、最初の選択がないことを示します。

次に、検索フィールドに複数の単語を入力すると、オートコンプリートによって最後の単語のみが置き換えられるのに対し、望ましい動作は検索文字列全体を置き換えることです。これを解決するために、NSTextViewをサブクラス化し、次のメソッドを追加しました。

-(NSRange) rangeForUserCompletion {
    return NSMakeRange (0, 1);
}

これにより、最後の単語だけでなく、検索文字列全体が確実に置き換えられます。

于 2012-12-10T05:41:56.780 に答える