2012-01-18 12 views
7

¿Existe la posibilidad de restablecer una UISearchbar con searchDisplayController programmatically que está activo y que ya contiene texto?Restablecer UISearchbar programmatically

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     searchDisplayController.searchResultsTableView.hidden = YES; 
     searchBar.showsCancelButton = NO; 
     [searchBar resignFirstResponder]; 
    } 
} 

Esta solución está funcionando, pero todavía hay texto en la barra de búsqueda. Si agrego esas líneas de código:

searchBar.text = @""; 

Siempre queda una vista negra transparente.

¿Alguna solución?

+0

tratar searchBar.text = nil; –

Respuesta

6

Aquí ya ve. Este es un método de delegado llamado cuando el usuario golpea cancelar. Si desea conectarlo de manera diferente, solo declare su barra de búsqueda como una salida y haga referencia a ella. De todos modos:

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 
{ 
    searchBar.text = @""; 
    [searchBar resignFirstResponder]; 
} 
+0

No entiendo cómo debería funcionar esto? Por favor, lea mi pregunta actualizada. –

+0

Creo La mejor pregunta en este punto es preguntar exactamente qué comportamiento estás buscando. En mis barras de búsqueda, rara vez uso el SB con el SRC. Solo uso un SB y me ocupo de cómo se me presenta. Si estás buscando para "restablecerlo", entonces el código que proporcioné es todo lo que necesita.Si está buscando "sacarlo de en medio", entonces uso el método de delegar scrollViewWillBeginDragging para sacar el teclado del camino y permitir al usuario desplazarse por los resultados. –

+0

Puedo enviarle un ejemplo completo de cómo hago las cosas (por ejemplo, casi siempre uso un TableView y no un TableViewController y pongo el SB en una posición fija sobre el televisor para que siempre esté accesible). Como dije, saber exactamente cómo quieres que se vea y cómo quieres que se comporte realmente nos ayudaría a ayudarte. –

0

qué no tienen que retirarse del firstResponder

+0

He actualizado mi pregunta. –

+0

primer asistente de respuesta cerrará el teclado. – RyanTCB

0
[self.searchBar resignFirstResponder] 
+1

Esta solución mantiene la barra de búsqueda como está y oculta el teclado. –

0

También puede ocultar de forma explícita el resultsTableView, si eso es lo que quiere:

searchDC.searchResultsTableView.hidden=YES; 

(searchDC es una instancia de UISearchDisplayController)

Esto lo ayudará a ocultar el botón Cancelar y cosas: http://www.alexandre-gomes.com/?p=418

+0

Preferiría una barra de búsqueda que está vacía y no está activada -> sin chancelButton –

+0

Ver mi respuesta editada –

+0

Ver mi pregunta editada. (-: –

4

Bastante seguro de lo que estás buscando es UISearchDisplayController.active

Desde el SDK:

@property(nonatomic, getter=isActive) BOOL active 

Si se establece este valor directamente, cualquier cambio se realiza sin animación. Use setActive: animated: si un cambio de estado debe ser animado.

Cuando el usuario se enfoca en el campo de búsqueda de una barra de búsqueda administrada, el controlador de visualización de búsqueda muestra automáticamente la interfaz de búsqueda. Puede usar esta propiedad para forzar que aparezca la interfaz de búsqueda.

+0

muy buena respuesta para la primera aquí. ¡Bienvenido! – brainray

1

Este hilo es tan viejo que tiene polvo. Todavía aquí estamos en Swift para

<#your UISearchController variable#>.isActive = false