2010-12-30 29 views
6

Ho un controller Nav all'interno di una sottoclasse personalizzata del controller Tab Bar che ho creato.Esistono eventi della barra delle schede per notificare quando qualcuno nasconde/mostra la barra delle schede?

Desidero sapere dalla barra delle schede (personalizzata) ogni volta che uno dei controller visualizzati tenta di nascondere o mostrare la barra delle schede. (ad esempio quando si spinge un VC che ha i suoi nascondigliBottomBarWhenPushed = YES sul controller Nac).

In breve voglio essere avvisato degli eventi che nascondono/mostrano la barra delle schede ma non sono riusciti a trovare nulla nel riferimento Apple. Ho provato a guardare UITabBar, UITabBarDelegate, UITabBarController e UITabBarControllerDelegate ma tutti sembrano fornire solo funzionalità correlate agli elementi della barra delle schede.

Grazie in anticipo.

risposta

0

sottoclasse UINavigationController e attuare il setter dietro hidesBottomBarWhenPushed (o sottoclasse l'UIViewController alla sottoclasse direttamente il metodo hidesBottomBarWhenPushed) e delegare la chiamata alla UITabBar (attraverso una chiamata diretta o una NSNotification).

+0

Non sono sicuro di averlo capito. hidesBottomBarWhenPushed è una proprietà che rappresenta uno stato. La proprietà non contiene il codice effettivo che nasconde la barra (la proprietà viene solitamente impostata prima che un controller venga inserito nello stack vcv). – nsof

9

Se si utilizza un controller della barra delle linguette, UIKit indica esplicitamente che ogni istanza del controller di navigazione che verrà visualizzata nel contesto del controller della barra delle schede sarà compresa tra la sua proprietà viewControllers. Ora ogni istanza UINavigationController dispone di un delegato, che definisce un metodo navigationController:willShowViewController:animated: che consente di sapere quando viene premuto un controller di visualizzazione su di esso.

Impostando il controller barra delle schede, come il delegato di ogni controller di navigazione che viene spinto su di esso, è possibile analizzare montone castrato il controller della vista che è spinto ha l'insieme di proprietà hidesBottomBarWhenPushed e generare un evento quando questo è il caso.

L'algoritmo utilizzato per nascondere la barra delle schede del controller della barra delle schede è il seguente: quando un controller di visualizzazione viene premuto su un controller di navigazione che è a sua volta contenuto in un controller della barra delle schede, se un controller di visualizzazione nella pila di navigazione della navigazione controller ha il set di proprietà hidesBottomBarWhenPushed, quindi la barra delle schede deve essere nascosta.

Quindi la barra delle schede è nascosta quando è selezionato un controller di navigazione e uno dei controller di visualizzazione nel proprio stack ha il set di proprietà hidesBottomBarWhenPushed.

+0

come impostare il controller della barra delle schede come delegato del controller di navigazione? Sto ricevendo errore Sto provando l'errore 'self.navigationController? .delegate = self.tabBarController' -' Impossibile assegnare il valore di tipo UITabBarController? per digitare UINavigationControllerDelegate? ' –

+0

Errore risolto utilizzando' self.navigationController? .delegate = self.tabBarController as! MyCustomTabBarViewController ' –

Problemi correlati