6

Tengo una clase principal con tabla vista y barra de búsqueda sobre ella, que es una subclase de controlador de tabla vista. Los delegados de searchBar y searchdisplaycontroller se configuran en una clase separada heredada de UISearchdisplaycontroller. El origen de datos y los delegados para tabla vista y barra de búsqueda se manejan en esta clase por separado. Las clases están bajo ARC.No se puede descartar la vista Buscar

Por lo tanto, cuando un usuario toca la búsqueda, el control se transfiere de la clase FilesListController (principal) a esta clase. Ahora, cuando un usuario en grifos botón de cancelación, el delegado barra de búsqueda establecen en esta clase es decir

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar 

se llama, pero no sirve el propósito de despedir el searchtableview pantalla completa y volver a la parentviewcontroller. Sin embargo, si no escribo este delegado en la clase de búsqueda, funciona correctamente. He puesto los delegados Searchbar en xib y en llamar:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar 

así:

self.searchResultsTableView.delegate = self; 
self.searchResultsTableView.dataSource = self; 
[parentFileViewController.searchDisplayController setDelegate:self]; 

Dónde estoy haciendo mal? Gracias por adelantado.

+0

[self.searchDisplayController setActive: NO anima ted: SÍ]; – jussi

+0

hola gracias @jussi ... funciona !!! Pero, ¿por qué no descarta por sí mismo? Esto es como si estuviéramos forzando al searchviewcontroller a descartar. –

+0

porque algunos desean almacenar cierta Información antes de desechar el Controlador. Voy a publicar esto como una respuesta. – jussi

Respuesta

13

Si desea borrar un UISearchBar con un SearchBarController, sólo tiene que utilizar este código:

[self.searchDisplayController setActive:NO animated:YES]; 
1

debe implementar renunciar a la respuesta de la función de delegado es decir

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar { 
     [searchBar resignFirstResponder]; 
} 
+0

Esto simplemente descarta el teclado, pero no descarta la vista de búsqueda y el botón cancelar. –

+0

en ese caso, jussi tiene razón – cekisakurek

-1

advertencias de memoria pueden aparecer en En cualquier momento durante el tiempo de ejecución de la aplicación, debe suponer que se producirá una advertencia de memoria y la vista y los objetos desechables tendrán que volver a crearse.

Estamos manejando esta situación mediante el establecimiento a cero nuestras matrices:

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 

if([self isViewLoaded] && self.view.window == nil) 
{ 
    self.view = nil; 
    keys = nil; 
    names = nil; 
    errorDuringNetworkCall = nil; 
} 
} 

Y despidiendo a la tableview barra de búsqueda antes de realizar la operación segue:

[self performSegueWithIdentifier:@"navigateToNextScreen" sender:self]; 
self.searchBar.text = @""; 
[self.searchDisplayController setActive:NO animated:YES]; 

Después de una advertencia de memoria se ha recibido la El método viewDidLoad se vuelve a llamar y las matrices se rellenan, la barra de búsqueda seguirá siendo útil. trabajo sin problemas

+0

No veo que esto responda la pregunta en absoluto –

Cuestiones relacionadas