Я добавил UISearchDisplayController в свой UITableViewController в InterfaceBuilder. Было очень легко заставить его работать, добавив метод searchBar: searchBar textDidChange: searchText
, который регенерирует массив данных для таблицы и вызывает reloadData
.
Но я хотел бы, чтобы предыдущий поиск отображался в следующий раз, когда пользователи коснутся панели поиска, поскольку гораздо проще коснуться (X) и очистить его, чем вводить его снова. Но я не могу заставить его сделать это. Ниже приведен код, который я пробовал:
- (void) searchBar: (UISearchBar *) searchBar textDidChange: (NSString *) searchText {
if( searchText && [searchText length] > 0 ) {
self.displayedRows = [[NSMutableArray initWithCapacity: 1];
for( NSString *l in self.allRows ) {
NSRange r = [l rangeOfString: searchText];
if( r.location != NSNotFound )
[self.displayedRows addObject: l];
}
[self.searchDisplayController.searchResultsTableView reloadData];
}
}
- (void) searchDisplayControllerWillBeginSearch: (UISearchDisplayController *) controller {
if( self.lastSearch && [self.lastSearch length] > 0 ) {
controller.searchBar.text = self.lastSearch;
[controller.searchResultsTableView reloadData];
}
}
- (void) searchDisplayControllerWillEndSearch: (UISearchDisplayController *) controller {
self.lastSearch = controller.searchBar.text;
self.displayedRows = self.allRows;
[self.tableView reloadData];
}
Последний поисковый текст правильно отображается в строке поиска в следующий раз, когда я касаюсь поиска, и я был удивлен, что «курсор» даже расположен в конце, но результаты поиска не отображаются, просто затемненный вид исходного содержимого, такой как поле поиска было пустым. Как только я набираю символ, результаты поиска обновляются.
Я попытался поместить эквивалент [self.searchDisplayController.searchResultsTableView reloadData]
в каждый из:
searchDisplayControllerDidBeginSearch: (UISearchDisplayController *) controller
searchDisplayController: (UISearchDisplayController *) controller didLoadSearchResultsTableView: (UITableView *) tableView
searchDisplayController: (UISearchDisplayController *) controller willShowSearchResultsTableView: (UITableView *) tableView
searchDisplayController: (UISearchDisplayController *) controller didShowSearchResultsTableView: (UITableView *) tableView
Но это не имело значения... просто пусто, пока я что-нибудь не наберу.
У кого-нибудь есть идеи, как получить предварительно загруженный результат поиска?