Я добавил UISearchDisplayController в свой UITableViewController в InterfaceBuilder. Было очень легко заставить его работать, добавив метод searchBar: searchBar textDidChange: searchText
, который регенерирует массив данных для таблицы и вызывает reloadData
.Как предварительно загрузить или инициализировать поиск с помощью UISearchDisplayController?
Но я хотел бы, чтобы предыдущий поиск показывался в следующий раз, когда пользователи касаются строки поиска, так как гораздо легче коснуться (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
Но это не имеет никакого значения ... просто пустой, пока я что-то типа.
Есть ли у кого-нибудь идеи, как получить предварительно загруженный результат поиска?
Удивительно, я думал, что я пробовал всевозможные комбинации всех разных команд willBegins и didBegins, но я перемещал только часть 'reloadData', поскольку предыдущий тест поиска всегда находился в поле поиска. – LavaSlider
Я пробовал, как вы предложили переместить 'controller.searchBar.text = self.lastSearch' и presto, он работает (что немного темно-flash, что было бы неплохо не иметь). Мне даже не кажется, что нужно 'reloadData'. Благодарю. – LavaSlider
(О, и у меня было так много «NSLogs». У меня были они, когда я вводил и оставлял методы и показывал содержимое полей и размеры массива ... он просто не обновлялся). – LavaSlider