Я добавил 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
Но это не имело значения ... просто пусто, пока я что-то не наберу.
У кого-нибудь есть идеи, как получить предварительно загруженный результат поиска?