7

Un po 'di storia sulla impostazione dei nostri punti di vista:Come fare UISearchController inattiva quando si passa vista

All'interno di un NavigationController, abbiamo un UITabBarController (con 3 schede) con una UIViewController che ha un UISearchController.

C'è un errore che se lasciamo il UISearchController attivo e passiamo a un'altra vista, quando torniamo alla vista di ricerca l'intero schermo è nero. Tuttavia, quando UISearchController non è attivo e cambiamo le visualizzazioni ciò non accade.

Si è tentato di impostare il controller in modo che non fosse attivo durante il passaggio da una vista all'altra; tuttavia, quando il UISearchController è nessuno attiva degli eventi segueing ottenere chiamato (impronte di registro appaiono da viewWillDissapear, viewWillAppear, etc.)

Guardando altri thread, abbiamo provato a installare self.definesPresentationContext = true ma che non funziona.

Qualcun altro ha avuto questo problema o sa come risolverlo?

+0

Puoi aggiungere il tuo codice, ho una configurazione simile e non ho problemi di questo tipo con 'UISearchController' –

+0

Ti sei assicurato che non ci sia alcun codice personalizzato in' viewWillDisappear' che fa casino con il controller di ricerca? L'impostazione di 'self.definesPresentationContext = true' anche per me non ha funzionato all'inizio perché prima avevo cercato di rimuovere il controller di ricerca su' viewWillDisappear'. Una volta rimosso il codice, ha funzionato (il controller di ricerca rimane mentre si cambiano le schede e non lo schermo nero). – lbarbosa

+0

Qualche correzione per questo? Ho lo stesso problema e l'impostazione 'self.definesPresentationContext = true' nasconde semplicemente la barra di navigazione e la mia barra di ricerca – ryder

risposta

2

tenta di impostare la searchbarController attiva come questo

self.resultSeachController.active = false 

prima di passare alla prossima Mostra

0

Ho affrontato lo stesso problema e risolto nel modo seguente:

ho esteso UITabBarController e ha creato una classe personalizzata TabBarController

class TabBarController: UITabBarController { 

In questa classe ho implementato il metodo didSelectItem, e dal fatto che il metodo ho chiamato un metodo del controller della vista che chiude il controllore ricerca

// UITabBarDelegate 
override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { 
    let vc = viewControllers![selectedIndex] as! CommonViewController 
    if vc.searchController.active { 
     vc.searchBarCancelButtonClicked_NoReload() 
    } 
} 

viewControllers è una matrice in UITabBarController che mantiene tutti i controller di vista comune UITabBarController e 'selectedIndex' è l'indice della scheda (e del controller della vista) che è stato visualizzato, e quindi si può arrivare al viewController che ha il searchController attivo.

Nella mia app tutti i controller di visualizzazione sono sottoclassi di una classe radice denominata CommonViewController in cui ho inserito tutti i vars ei metodi comuni a tutti i controller di visualizzazione, come tutte le funzionalità di ricerca. Pertanto, controllo semplicemente se il controller di ricerca è attivo e se lo è, chiamo un metodo che lo rende inattivo e fa qualche altra pulizia correlata.

Problemi correlati