ti consiglierei di farlo:
In primo luogo, si dovrebbe pensare a tutti i tipi di tabulazione che potrebbero essere nella barra delle schede. Sul tuo screenshot ci sono le schede, il controller presente e la scheda, che presenta il menu. Quindi potremmo creare enum con tutti questi tipi:
enum TabType {
case controller
case menu
}
Dopo di che è possibile memorizzare gamma di tipi di tabulazione in ordine in cui sono mostrati nella barra delle schede, per il vostro screenshot in questo modo
let tabTypes: [TabType] = [.controller, .controller, .controller, .controller, .menu]
allora si dovrebbe implementare il metodo UITabBarControllerDelegate
func tabBarController(_:, shouldSelect:) -> Bool
, che restituisce true
se la barra delle schede consente di selezionare il controller passato e false
in caso contrario.
Se si restituisce true
di tutti gli altri lavori (come la presentazione di controller di visualizzazione e altre cose), il controller della barra delle schede lo farà per voi.
Nel tuo caso si desidera eseguire un'azione personalizzata sul clic della scheda, quindi è necessario restituire false
. Prima di tornare dovresti presentare il tuo menu.
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if let index = tabBarController.viewControllers?.index(of: viewController),
index < tabBarTypes.count {
let type = tabBarTypes[index]
switch type {
case .menu:
// perform your menu presenting here
return false
case .controller:
// do nothing, just return true, tab bar will do all work for you
return true
}
}
return true
}
In questa implementazione è possibile modificare facilmente ordinare tipi di tabulazione o aggiungere qualche tipo un'altra scheda e gestire opportuno.
hai trovato la soluzione per questo? Ho bisogno dello stesso –
Certo che sembra brutto ed è un po 'un anti-modello. È _usualmente_ meglio fare in modo che la quinta scheda 'spinga' un nuovoViewController che avrà quindi più opzioni. – Honey
Nella scheda cinque, cosa ci sarebbe in background? (la parte bianca), sarebbe la schermata precedente selezionata? –