web-dev-qa-db-ja.com

UITextField Autocomplete?

特定の値のUITextFieldにオートコンプリート機能を実装する方法があるかどうかを理解しようとしています。

私はUITextFieldがiPhone辞書を使用してこれを行うことができることを知っています(サファリなどでgoogleを検索するのと同じように)、プログラムで指定した特定の値に修正できるようにしたいと考えています。

これを行う方法?

30
Brett

チェックアウト このチュートリアル カスタムオートコンプリートを実現する1つの方法を示すRay Wenderlichから

7
Mic Pringle

または、次のUITextFieldサブクラス(DOAutocompleteTextFieldに触発されたもの)を使用できます。

https://github.com/hoteltonight/HTAutocompleteTextField

さらにいくつかの機能があり、積極的に開発されています。この例は、自動提案テキストのデータソースとして配列を使用する方法を示しています。これは、DOAutocompleteTextFieldと同じアプローチをとります。ユーザーが入力すると、テキストフィールドに「ゴースト」された推奨完了テキストが表示されます。

6
jonsibley

UISearchDisplayControllerを調べましたか? ここではスタックオーバーフローのスレッド がいくつかあり、コアデータ参照を使用している場合はそれを含みます。また、いくつかの他の 代替方法 もあります。

2
DenVog

前述のRay Wenderlichチュートリアルを利用して、既存のUITableViewの名前をフィルターするために、このバージョンを実装しました。

テキストフィールドのデリゲートをビューコントローラーとして、ビューコントローラーをUITextFieldDelegateとして設定し、次の2つのメソッドを実装しました。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *substring = [NSString stringWithString:textField.text];
    substring = [substring stringByReplacingCharactersInRange:range withString:string];
    [self searchAutocompleteEntriesWithSubstring:substring];
    return YES;
}

- (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring
{   
    NSMutableArray *autoCompleteArray = [[NSMutableArray alloc]init];
    [self retrieveData];

    for(NSString *curString in _staffTableArray)
    {
        NSString *lowerCaseCur = [curString lowercaseString];
        NSRange substringRange = [lowerCaseCur rangeOfString:substring];
        if (substringRange.location == 0)
        {
            [autoCompleteArray addObject:curString];
        }
    }
    if (![substring isEqualToString:@""])
    {
         _staffTableArray = [NSMutableArray arrayWithArray:autoCompleteArray];
    }  
    [_staffListTableView reloadData];
}
2
Robert

このデリゲートメソッドを使用します。指定した値を置き換えることができます。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;   // return NO to not change text
      if ([string isEqualToString:@"StackO"]) {
           textField.text=@"StackOverflow";
      }
    return YES;
}
1
Rakesh Bhatt

同様のものが必要なので、このスレッドに直面しました。 UITextfieldDelegateのメソッドを使用して独自の検索を実装するのはどうですか?

- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

おそらくご存知でしょうが、このメソッドはすべてのUITextfieldの入力に対して呼び出されます。

1
Carlos