Dodałem UISearchDisplayController do mojego UITableViewController w InterfaceBuilder. Bardzo łatwo było go uruchomić, dodając metodę searchBar: searchBar textDidChange: searchText
, która regeneruje tablicę danych dla tabeli i wywołuje reloadData
.Jak wstępnie załadować lub zainicjować wyszukiwanie przy użyciu UISearchDisplayController?
Ale chciałbym, aby poprzednie wyszukiwanie było wyświetlane następnym razem, gdy użytkownicy dotkną paska wyszukiwania, ponieważ znacznie łatwiej jest dotknąć przycisku (X) i wyczyścić go, niż wpisywać ponownie. Ale nie mogę tego zrobić. Poniżej znajduje się kod Próbowałem:
- (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];
}
Wyszukiwanie ostatni tekst jest odpowiednio w pasek wyszukiwania następnym razem dotknąć szukanie i byłem zaskoczony, że „kursor” jest jeszcze umieszczony na końcu, ale wyniki wyszukiwania nie są wyświetlane, tylko przyciemniony widok oryginalnych treści, takich jak pole wyszukiwania, był pusty. Po wpisaniu znaku wyniki wyszukiwania są aktualizowane.
Próbowałem oddanie równowartość [self.searchDisplayController.searchResultsTableView reloadData]
do każdego z:
searchDisplayControllerDidBeginSearch: (UISearchDisplayController *) controller
searchDisplayController: (UISearchDisplayController *) controller didLoadSearchResultsTableView: (UITableView *) tableView
searchDisplayController: (UISearchDisplayController *) controller willShowSearchResultsTableView: (UITableView *) tableView
searchDisplayController: (UISearchDisplayController *) controller didShowSearchResultsTableView: (UITableView *) tableView
Ale to nie miało znaczenia ... po prostu pusta, dopóki nie wpisać coś.
Czy ktoś ma pomysły, jak uzyskać wstępnie załadowany wynik wyszukiwania?
Zdumiewające, myślałem, że wypróbowałem każdą możliwą kombinację wszystkich różnych woluminów i didBegins, ale poruszałem tylko część 'reloadData', ponieważ poprzedni test był zawsze w polu wyszukiwania. – LavaSlider
Próbowałem, jak zasugerowałeś przeniesienie 'controller.searchBar.text = self.lastSearch' i presto, działa (który trochę ciemny flash, który byłoby miło nie mieć). Wydaje mi się nawet, że nie potrzebuję 'reloadData'. Dzięki. – LavaSlider
(Aha, i miałem tak wiele 'NSLogs' .Miałem je, kiedy wchodziłem i wychodziłem z metod i pokazując zawartość pola i rozmiary tablic ... to po prostu nie aktualizuje). – LavaSlider