6

Ho una classe genitore con tableview e searchbar che è una sottoclasse di controller tableview. I delegati per la ricercaBar e searchdisplaycontroller sono impostati in una classe separata ereditata da UISearchdisplaycontroller. L'origine dati e i delegati per tableview e searchbar vengono gestiti in questa classe separatamente. Le classi sono sotto ARC.Impossibile chiudere la vista di ricerca

Quindi, quando un utente tocca la ricerca, il controllo trasferisce dalla classe FilesListController (padre) a questa classe. Ora, quando un utente tocca pulsante di annullamento, il delegato searchbar impostati in questa classe cioè

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar 

è chiamato, ma non serve allo scopo di respingere il searchtableview schermo intero e tornare alla parentviewcontroller. Tuttavia, se non scrivo questo delegato nella classe di ricerca, funziona correttamente. Ho impostato i delegati Searchbar nel XI ter e a chiamare:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar 

come questo:

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

Dove sto andando male? Grazie in anticipo.

+0

[self.searchDisplayController setActive: NO anima Ted: YES]; – jussi

+0

hey grazie @jussi .. funziona !!! Ma perché non respinge da solo? Questo è come se stessimo costringendo il searchviewcontroller a chiudere. –

+0

perché alcuni desiderano memorizzare alcune informazioni prima di dissociare il controller. Pubblicherò questo come una risposta. – jussi

risposta

13

Se si vuole licenziare un UISearchBar con un SearchBarController, basta usare questo codice:

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

è necessario implementare le dimissioni il risponditore nella funzione di delegato cioè

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

Questo semplicemente chiude la tastiera, ma non elimina la vista di ricerca e il pulsante Annulla. –

+0

in questo caso, jussi è giusto – cekisakurek

-1

avvisi di memoria possono apparire in in qualsiasi momento durante il tempo di esecuzione dell'applicazione, è necessario presumere che si verificherà un avviso di memoria e che la vista e gli oggetti monouso dovranno essere ricreati.

Stiamo trattando tale situazione impostando a zero i nostri array:

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 

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

E respingendo il barra di ricerca Tableview prima di eseguire l'operazione segue:

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

Dopo un avviso di memoria viene ricevuta la Il metodo viewDidLoad viene richiamato e gli array vengono popolati, la barra di ricerca continuerà a essere utile.lavoro senza problemi

+0

Non vedo questo come rispondere alla domanda a tutti –

Problemi correlati