Я пытаюсь настроить контроллер отображения поиска для обработки асинхронных результатов из веб-службы. У меня есть основные моменты, но я столкнулся с действительно странной проблемой, которую не могу понять.
Похоже на то, чтобы настроить контроллер дисплея поиска для асинхронности, вам действительно нужно сделать две вещи:
- Возврат НЕТ для
searchDisplayController: shouldReloadTableForSearchString,
и
- обрабатывать searchBarSearchButtonClicked
и огонь с перезагрузки стола
я.
Я делаю и то, и другое, но то, что я вижу, это то, что контроллер отображения поиска перезагружает таблицу по первому символу, введенному в строку поиска, хотя я возвращаю NO согласно # 1. Он не перезагружается при вводе последующих символов.
Итак, мой вопрос: как мне удержать контроллер дисплея поиска от попытки перезагрузить таблицу, пока пользователь печатает? (специально для этого первого введенного символа)
Я видел эту проблему упомянутой как часть пары других вопросов, но я не видел прямого ответа на проблему. Я хотел бы понять, что происходит или что я делаю неправильно, прежде чем прибегнуть к куче пользовательского интерфейса, пытающегося обойти это.
Вот быстрый пример моего кода, чтобы показать проблему. Когда я запускаю это и набираю «abcde» в строке поиска, после ввода «a» результаты отображаются как «a # 0», «a # 2» и т. Д. Они не обновляются, пока я не нажму кнопку поиска. затем вы видите «abcde # 0», «abcde # 1» и т. д. Желаемый результат, конечно, ничего не происходит, пока я не нажму кнопку поиска.
#pragma mark -
#pragma mark UISearchDisplayController Delegate Methods
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
return NO;
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {
return NO;
}
#pragma mark -
#pragma mark UISearchBarDelegate Methods
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
[self.searchDisplayController.searchResultsTableView reloadData];
}
#pragma mark -
#pragma mark Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 20;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = [self.searchDisplayController.searchBar.text stringByAppendingFormat:@" #%d", indexPath.row];
return cell;
}
Спасибо! (кстати, это мой первый вопрос, заданный здесь - пожалуйста, дайте мне знать, если я пропущу какие-либо пункты этикета:)