2011-03-15 8 views
11

Estoy usando un UISearchDisplayController en mi aplicación. Cuando el usuario selecciona un elemento en los resultados de búsqueda devueltos, desactivo el UISearchDisplayController. La desactivación del controlador borra el texto que el usuario ha escrito. Quiero mantenerlo allí. Puedo forzar el texto de vuelta a UISearchBar volviendo a configurarlo después de que se desactivó el controlador.Cómo configurar texto en UISearchBar sin activar UISearchDisplayController

así:

NSString* searchText = self.searchDisplayController.searchBar.text; 
[self.searchDisplayController setActive:NO animated:YES]; 
self.searchDisplayController.searchBar.text = searchText; 

que trabaja.

Sin embargo, estoy viendo un problema de tiempo si no animo la llamada desactivada. Llamando setActive así:

NSString* searchText = self.searchDisplayController.searchBar.text; 
[self.searchDisplayController setActive:NO animated:NO]; 
self.searchDisplayController.searchBar.text = searchText; 

hace que el UISearchDisplayController que se active de nuevo!

¿Hay alguna manera de configurar el texto de UISearchBar sin tener el UISearchDisplayController asociado a la activación? ¿Alguna otra sugerencia para evitar este comportamiento?

Respuesta

10

Para cualquier otra persona preguntando cómo hacer esto logré conseguir que funcione mediante la adición de esto en mi delegado:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 
{ 
    if(!controller.isActive){ 
     controller.searchResultsTableView.hidden = YES; 
     return NO; 
    } 
    controller.searchResultsTableView.hidden = NO; 

    [....] 

    return YES; 
} 
+0

error: el control llega al final de la función de vacío – malhal

+0

Gracias @indiekiduk He actualizado el código anterior. – Sig

3

En el foro interno de Apple alguien sugirió una solución para establecer el texto del marcador de posición de la barra de búsqueda en el último texto de búsqueda cuando se desactiva el UISearchDisplayController. Aparece en la caja, pero está en gris. No es ideal, pero posiblemente aceptable.

4

Aaron respuesta funciona bien. Una forma más sencilla de hacer las cosas, mediante la edición de su paz de código:

NSString* searchText = self.searchDisplayController.searchBar.text; 
[self.searchDisplayController setActive:NO animated:NO]; 
self.searchDisplayController.delegate = nil; 
self.searchDisplayController.searchBar.text = searchText; 
self.searchDisplayController.delegate = self; //or any delegate you like! 

De esta manera, ninguna de sus funciones de delegado va a activarse cuando se ajusta el texto de la barra de búsqueda.

Cuestiones relacionadas