5

Mi aplicación utiliza un UISearchDisplayController. Cuando el usuario ha ingresado un término de búsqueda, quiero que permanezca visible en la barra de búsqueda. Esto funciona si el usuario elige uno de los resultados coincidentes, pero no si el usuario hace clic en el botón "Buscar".Mantener el término de búsqueda visible cuando UISearchDisplayController está inactivo

Esto funciona:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     NSString *selectedMatch = [self.searchMatches objectAtIndex:indexPath.row]; 
     [self.searchDisplayController setActive:NO animated:YES]; 
     [self.searchDisplayController.searchBar setText:selectedMatch]; 

     return; 
    } 
    ... 

Pero si hago lo mismo en -searchBarSearchButtonClicked: el texto no se queda en la barra de búsqueda. ¿Alguna idea sobre cómo puedo lograr esto en esta situación?

Relacionado, si configuro el texto de la barra de búsqueda (pero dejo el UISearchDisplayController inactivo) esto desencadena la visualización de searchResultsTableView. Solo quiero mostrar eso cuando el usuario toque la barra de búsqueda.

Editar: encontrado una solución para ajustar el texto de una barra de búsqueda sin mostrar la searchResultsTableView en cualquier momento:

// This hacky YES NO is to keep results table view hidden (animation required) when setting search bar text 
[self.searchDisplayController setActive:YES animated:YES]; 
[self.searchDisplayController setActive:NO animated:YES]; 
self.searchDisplayController.searchBar.text = @"text to show"; 

Mejor aún sugerencias bienvenidas!

Respuesta

7

Actualmente, no puede usar el mismo código dentro del método searchBarSearchButtonClicked porque no tiene indexPath para seleccionar el elemento correcto en su matriz searchMatches.

Si el usuario hace clic en el botón de búsqueda y desea ocultar la interfaz SearchController, debe averiguar qué texto colocar dentro de la búsqueda (por ejemplo, seleccionar el mejor resultado coincidente en la lista).

Este ejemplo simplemente dejar que permanezca visible y sin cambios el término de búsqueda cuando el usuario hace clic en el botón de búsqueda:

-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    NSString *str = searchBar.text; 
    [self.searchController setActive:NO animated:YES]; 
    self.searchController.searchBar.text = str; 
} 

Espero que esto ayude, Vicente

+0

Ah, gracias! Estaba haciendo '[self.searchController setActive: NO animado: YES]; self.searchController.searchBar.text = searchBar.text; 'pero obviamente' searchBar.text' ya no es lo que yo pensaba que era debido al método 'setActive' vaciando la barra de búsqueda. –

3

Restablecimiento manual de la cadena en la barra de búsqueda desencadena alguna de los métodos UISearchDisplayDelegate nuevamente. Esto es algo que probablemente no quieras, en este caso.

modificaría vdaubry contestar un poco, y me da:

-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    NSString *str = searchBar.text; 
    [self.searchController setActive:NO animated:YES]; 
    self.searchController.delegate = nil; 
    self.searchController.searchBar.text = str; 
    self.searchController.delegate = self //or put your delegate here if it's not self! 
} 
Cuestiones relacionadas