2015-02-23 24 views
9

Sto usando UISearchController in iOS 8 con il seguente intializaiton in viewDidLoad di un controller vista incorporata in un controllore schedaUISearchController rende il controller nero

_searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 

    _searchBar = _searchController.searchBar; 
    [_searchController.searchBar sizeToFit]; 
    _searchController.searchBar.delegate = self; 
    _searchController.searchResultsUpdater = self; 
    _searchController.dimsBackgroundDuringPresentation = NO; 
    _searchController.hidesNavigationBarDuringPresentation = NO; 
    self.definesPresentationContext = NO; 
    _shopsTable.tableHeaderView = _searchController.searchBar; 

Ho implementato

- (void) updateSearchResultsForSearchController:(UISearchController *)searchController e (void)filterContentForSearchText:(NSString *)searchText

e la ricerca funziona, il tableview viene aggiornato correttamente, ecc.

Ma!

Se si passano le schede mentre il controllo di ricerca è attivo (basta toccare la barra di ricerca o con del testo) in una scheda diversa, quindi si torna alla scheda di ricerca, viene visualizzata una schermata vuota con solo la barra di ricerca, ad esempio questo

enter image description here

In questo caso, la ricerca di cose che iniziano con lar, che ha fatto i risultati tornare e visualizzati correcly. Ma se cambio scheda e ritorna alla scheda di ricerca ottengo una schermata vuota come questa. L'unico modo in cui il controller ritorna allo stato originale è se lo faccio _searchController.active = NO. Ma se l'utente vuole mantenere attiva la ricerca, non posso semplicemente disattivarla.

Sono sicuro che mi manca qualcosa, ma dal momento che non c'è molto da fare in UISeachController, non riesco a capire che cosa sta causando questo ..

+0

potete per favore fornire codice c obiettivo di esempio, sono bloccato con lo stesso problema? Sono molto nuovo allo sviluppo IOS. Ho un controller di visualizzazione separato per la ricerca e l'elenco principale. è questo il problema. – Amith

risposta

20

Prova self.definesPresentationContext = YES; invece di NO. Ecco come ho configurato il mio UISearchController, ma non l'ho mai fatto prima in un UITabBarController.

func setupSearchController() { 
    let resultsController = UIStoryboard(name: "ATPageTableViewController", bundle: nil).instantiateViewControllerWithIdentifier("ATPageTableSearchResultsViewController") as! ATPageTableSearchResultsViewController 
    searchController = UISearchController(searchResultsController: resultsController) 
    searchController.delegate = self 
    resultsController.delegate = self 
    resultsController.cellIdentifier = ATDataSetItemTableViewCellIdentifier; 
    resultsController.table = self.table! 
    searchController.searchBar.sizeToFit() 
    self.tableView.tableHeaderView = searchController.searchBar 
    searchController.searchResultsUpdater = self 
    searchController.searchBar.delegate = self 
    definesPresentationContext = true 

} 
+1

Grazie, non mi ha aiutato direttamente ma mi ha portato al problema. Ho usato un controller di visualizzazione con delegati di tabella e, una volta passato a un controller tableview, il problema è stato risolto .. –

0

Scrivere il codice seguente in viewDidLoad mehtod.

self.definesPresentationContext = true

searchController.searchResultsUpdater = auto

searchController.searchBar.delegate = auto

searchController.dimsBackgroundDuringPresentation = false searchController.definesPresentationContext = true

Problemi correlati