UITextField Autocomplete – iPhone SDK
Я пытаюсь выяснить, есть ли способ реализовать функцию автозаполнения в UITextField
для определенных значений.
Я знаю, что UITextField
может сделать это, используя словарь iPhone (так же, как поиск google в safari и т. Д.), Но я хочу иметь возможность программно корректно использовать определенные значения, которые я указываю.
Кто-нибудь знает, как это сделать?
- Рендеринг свойств объекта в реактиве
- Как перебирать объект JavaScript?
- Как узнать, когда UITableView завершил ReloadData?
- Как клонировать объекты
- различия между использованием wmode = "transparent", "opaque" или "window" для встроенного объекта на веб-странице
Большое спасибо, Бретт
- Как создать NSTimer в фоновом streamе?
- Как вы получаете «ссылку на объект» объекта в java, когда toString () и hashCode () были переопределены?
- Как читать данные из NSFileHandle по строкам?
- NSString: простой способ удалить аккорды UTF-8 из строки?
- С чем следует заменить устаревший метод sizeWithFont:?
- libxml / tree.h нет такого файла или каталога
- Разница между объектом и classом в Scala
- C #: печать всех свойств объекта
Brett,
Я сделал что-то очень похожее на это, работая над недавним и довольно крупным проектом. У нас был постоянно меняющийся список автозаполняющих терминов и построил автоматическое заполнение вокруг них.
Во-первых, вы захотите создать какой-то тип автоматического controllerа. Он должен взять строку и вернуть все возможные автополные термины для этой строки.
-(NSArray *)completionsForString:(NSString *)myString;
Затем проверьте class UIMenuController. Это class, который показывает параметры вырезания / копирования / вставки во многих приложениях. Вы можете получить общий экземпляр, заполнить элементы меню самостоятельно и показать его над текстовым полем. Затем пользователь может просто нажать термин, который они хотят.
В конце концов, решение работало очень хорошо для наших нужд. Надеюсь, это сработает для вас.
Просмотрите этот учебник от Рэя Вендерлиха, который демонстрирует один из способов достижения пользовательского автозаполнения
В качестве альтернативы вы можете использовать этот подclass UITextField (вдохновленный DOAutocompleteTextField):
https://github.com/hoteltonight/HTAutocompleteTextField
Он обладает еще несколькими функциями и активно развивается. В этом примере показано, как использовать массив в качестве источника данных для текста с автоматической записью. Он использует тот же подход, что и DOAutocompleteTextField, в том смысле, что он отображает предложенный текст завершения «призрачный» в текстовом поле по типу пользователя.
Вы заглянули в UISearchDisplayController
? В разделе «Переполнение стека» есть несколько streamов , включая ссылки на core data, если это то, что вы используете. Также некоторые альтернативные методы , в другом месте.
С помощью вышеупомянутого учебника Ray Wenderlich я только что внедрил эту версию для фильтрации имен в существующем UITableView
.
Я установил делегат текстового поля в качестве моего controllerа представления, моего controllerа представления как 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]; }
используйте этот метод делегата. вы можете заменить значения, которые вы указали.
- (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; }
Просто столкнулся с этой нитью, потому что мне нужно что-то подобное. Как реализовать собственный поиск с помощью метода UITextfieldDelegate:
- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
Как вы, вероятно, знаете, этот метод вызывается для каждого ввода UITextfield.