特定の値のUITextField
にオートコンプリート機能を実装する方法があるかどうかを理解しようとしています。
私はUITextField
がiPhone辞書を使用してこれを行うことができることを知っています(サファリなどでgoogleを検索するのと同じように)、プログラムで指定した特定の値に修正できるようにしたいと考えています。
これを行う方法?
チェックアウト このチュートリアル カスタムオートコンプリートを実現する1つの方法を示すRay Wenderlichから
または、次のUITextFieldサブクラス(DOAutocompleteTextFieldに触発されたもの)を使用できます。
https://github.com/hoteltonight/HTAutocompleteTextField
さらにいくつかの機能があり、積極的に開発されています。この例は、自動提案テキストのデータソースとして配列を使用する方法を示しています。これは、DOAutocompleteTextFieldと同じアプローチをとります。ユーザーが入力すると、テキストフィールドに「ゴースト」された推奨完了テキストが表示されます。
UISearchDisplayController
を調べましたか? ここではスタックオーバーフローのスレッド がいくつかあり、コアデータ参照を使用している場合はそれを含みます。また、いくつかの他の 代替方法 もあります。
前述の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];
}
このデリゲートメソッドを使用します。指定した値を置き換えることができます。
- (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;
}
同様のものが必要なので、このスレッドに直面しました。 UITextfieldDelegateのメソッドを使用して独自の検索を実装するのはどうですか?
- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
おそらくご存知でしょうが、このメソッドはすべてのUITextfieldの入力に対して呼び出されます。