Agregué un UISearchDisplayController a mi UITableViewController en InterfaceBuilder. Fue muy fácil hacerlo funcionar agregando un método searchBar: searchBar textDidChange: searchText
que regenera la matriz de datos para la tabla y llama al reloadData
.¿Cómo precargar o inicializar una búsqueda usando UISearchDisplayController?
Pero me gustaría que la búsqueda anterior se muestre la próxima vez que los usuarios toquen la barra de búsqueda, ya que es mucho más fácil tocar la (X) y borrarla que escribirla de nuevo. Pero no puedo lograr que lo haga. A continuación se muestra el código que he intentado:
- (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];
}
El último texto de búsqueda es apropiada en la barra de búsqueda la próxima vez que toco la búsqueda y me sorprendió que el 'cursor' incluso se coloca al final, pero el los resultados de búsqueda no se muestran, solo la vista oscurecida de los contenidos originales como el campo de búsqueda estaba vacía. Tan pronto como escribo un personaje, los resultados de la búsqueda se actualizan.
He intentado poner el equivalente de [self.searchDisplayController.searchResultsTableView reloadData]
en cada uno de:
searchDisplayControllerDidBeginSearch: (UISearchDisplayController *) controller
searchDisplayController: (UISearchDisplayController *) controller didLoadSearchResultsTableView: (UITableView *) tableView
searchDisplayController: (UISearchDisplayController *) controller willShowSearchResultsTableView: (UITableView *) tableView
searchDisplayController: (UISearchDisplayController *) controller didShowSearchResultsTableView: (UITableView *) tableView
Pero no había ninguna diferencia ... solo en blanco hasta que escribo algo.
¿Alguien tiene alguna idea de cómo obtener un resultado de búsqueda precargado?
Sorprendente, pensé que había intentado todas las combinaciones posibles de todos los diferentes principios de inicio y comienzo, pero solo estaba moviendo la parte 'reloadData' ya que la prueba de búsqueda anterior siempre estaba en el campo de búsqueda. – LavaSlider
Intenté, como sugirió mover el 'controller.searchBar.text = self.lastSearch' y presto, funciona (que es un poco oscuro-flash que sería bueno no tener). Ni siquiera parece necesitar el 'reloadData'. Gracias. – LavaSlider
(Ah, y tenía tantos 'NSLogs'. Los tenía cuando estaba ingresando y dejando métodos y mostrando los contenidos de campo y los tamaños de arreglo ... simplemente no se actualizaba). – LavaSlider