5

次のように動作するnssearchfieldを作成する方法を探しています。

  • ユーザーがテキストで入力
  • 一致に基づいて、オートコンプリートのドロップダウンが表示されます
  • 検索フィールドのテキストは、リストの最初の項目にオートコンプリートされませ

重要なのは、文字列照合でサブ文字列を検索すると、入力した文字列が上書きされるため、テキストフィールドのオートコンプリートが機能しないということです。実際、これがデフォルトの動作であると思われますか、それとも検索フィールドの目的を誤解していますか?
さらに入力すると、リストがさらに制限されますが、オートコンプリートドロップダウンでアイテムを選択した後でのみ、そのアイテムがテキストフィールドに挿入されます。

nssearchfieldを使用してこれを実行できない場合、代替手段はありますか?

4

1 に答える 1

4

私自身の解決策は実際には非常に単純でした。オートコンプリートの候補のリストに検索文字列自体を追加するだけです。
これはNSSearchFieldデリゲートメソッドで行われcontrol:textView:completions:forPartialWordRange:indexOfSelectedItem:ます:

...
partialString = [[textView string] substringWithRange:charRange];
...

matches       = [NSMutableArray array];

// find any match in our keyword array against what was typed -
for (i=0; i< count; i++)
{
string = [keywords objectAtIndex:i];
if ([string
     rangeOfString:partialString
     options: NSCaseInsensitiveSearch | NSForcedOrderingSearch
     range:NSMakeRange (0, [string length])]
    .location != NSNotFound) {
  [matches addObject:string];
 }
}
[matches sortUsingSelector:@selector(compare:)];

//  Make sure we insert the already entered string, even if it does not
//  match with any of the retrieved keywords. This will enter this string
//  in the search field, as we intended, and it will not be overwritten 
//  with any match.
[matches insertObject:partialString atIndex: 0];

return matches;
于 2010-11-01T08:29:16.743 に答える