UITextField Автозаполнение?
Я пытаюсь выяснить, есть ли способ реализовать функцию автозаполнения в UITextField
для конкретных значений.
Я знаю, что UITextField
может сделать это с помощью словаря iPhone (так же, как поиск в Google в Safari и т.д.), Но я хочу иметь возможность программно настроить его на определенные значения, которые я указываю.
Как это сделать?
Ответы
Ответ 1
Бретт,
Я сделал что-то очень похожее на это, работая над недавним и довольно крупным проектом. У нас был постоянно меняющийся список автозаполняющих терминов и построил авто-полный вокруг них.
Во-первых, вы захотите сделать какой-то тип автоматического контроллера. Он должен взять строку и вернуть все возможные автополные термины для этой строки.
-(NSArray *)completionsForString:(NSString *)myString;
Затем проверьте класс UIMenuController. Это класс, который показывает параметры cut/copy/paste во многих приложениях. Вы можете получить общий экземпляр, заполнить элементы меню самостоятельно и показать его над текстовым полем. Затем пользователь может просто нажать термин, который они хотят.
В конце концов, решение работало очень хорошо для наших нужд. Надеюсь, это сработает для вас.
Ответ 2
Просмотрите этот учебник от Ray Wenderlich, который демонстрирует один из способов достижения пользовательского автозаполнения
Ответ 3
В качестве альтернативы вы можете использовать этот подкласс UITextField (вдохновленный DOAutocompleteTextField):
https://github.com/hoteltonight/HTAutocompleteTextField
Он получил еще несколько функций и активно развивается. В этом примере показано, как использовать массив в качестве источника данных для текста с автоматической записью. Он использует тот же подход, что и DOAutocompleteTextField, поскольку он показывает предлагаемый текст завершения "призрачный" в текстовом поле по типу пользователя.
Ответ 4
Вы заглянули в UISearchDisplayController
? Есть несколько потоков здесь в переполнении стека, включая ссылки на основные данные, если это то, что вы используете. Также некоторые альтернативные методы, в другом месте.
Ответ 5
С помощью вышеупомянутого учебника Ray Wenderlich я только что внедрил версию этого для фильтрации имен в существующем UITableView
.
Я установил делегат текстового поля в качестве моего контроллера представления, моего контроллера представления как UITextFieldDelegate
и реализовал эти два метода:
- (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];
}
Ответ 6
используйте этот метод делегата. вы можете заменить значения, которые вы указали.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text
if ([string isEqualToString:@"StackO"]) {
[email protected]"StackOverflow";
}
return YES;
}
Ответ 7
Просто столкнулся с этой нитью, потому что мне нужно что-то подобное. Как реализовать собственный поиск с помощью метода UITextfieldDelegate:
- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
Как вы, наверное, знаете, этот метод вызывается для каждого ввода UITextfield.