2015-11-12 19 views
7

voglio ottenere lo stesso flusso di Facebook Messenger app, con un controller barra delle schede all'interno della vista master. Vedi enter image description hereUITabBarController all'interno maestro di UiSplitViewController

Ive fatto esattamente come descritto in questa risposta Create a TabBar Controller with a Master-detail template?

Tuttavia! Non funziona correttamente su iPhone, solo su iPad. Su iPhone, la navigazione all'indietro non funziona. Il riquadro dei dettagli si apre proprio come un modale seque senza possibilità di spostarsi all'indietro. Quale potrebbe essere l'errore qui? È possibile raggiungere questo obiettivo con lo standard uisplitviewcontroller? Ho provato a incorporare anche navigatorcontroller in tabbarcontroller (rendendo il controllo di navigazione come root nella vista principale), quindi funziona per iPhone ma non per iPad.

+0

Si potrebbe trovare un po 'di informazioni su questo problema qui: Lasse1234

+0

@Zeezer come ha fatto si finisce per risolvere questo? – SAHM

+0

@SAHM Impossibile risolverlo, ridisegnare il mio flusso. Se trovi una soluzione che funziona sia per iPad che per iPhone, pubblicala e io la accetterò. Grazie – Zeezer

risposta

2

Ho finito per aggirare questo non utilizzando uno UITabBarController, creando invece un CustomTabBarController che eredita da UIViewController. Il controller personalizzato ha un UITabBar in fondo la sua vista, e molteplici altri UIViewController s incorporati in un contenitore Visualizzazioni. Il controller personalizzato imposta la proprietà isHidden a true per tutto il controllore vista incorporata tranne quello che corrisponde alla scheda selezionata.

Il seguente è un semplice esempio con due linguette, identificati dal loro tag:

class CustomTabBarController: UIViewController, UITabBarDelegate { 

    @IBOutlet weak var tab1View: UIView! 
    @IBOutlet weak var tab2View: UIView! 
    @IBOutlet weak var tabBar: UITabBar! 

    override func viewDidLoad() { 
     tabBar.delegate = self 
    } 

    func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 
     tab1View.isHidden = item.tag != 1 
     tab2View.isHidden = item.tag != 2 
    } 
} 

Questo controller personalizzata deve essere impostato alla radice di un UINavigationController, che a sua volta deve essere impostato come master controller della Split View controller:

Storyboard showing custom tab bar controller in a split view controller

Questa configurazione funziona sia per iPad e iPhone:

iPhone screenshot showing split view in combined mode                     iPad screenshot showing split view in split mode

Ci sono alcuni inconvenienti di questo metodo: regolatore scheda

  • L'usanza è meno facile da lavorare - l'aggiunta di un la nuova scheda richiede l'aggiunta di un'altra vista incorporata e la connessione a una presa nel controll ER.

  • Impostazione il titolo dell'articolo di navigazione e di sinistra e voci dei tasti a destra barra deve essere fatto all'interno del controller barra delle schede personalizzate, sulla selezione della scheda.

  • Questo metodo utilizza (penso) più memoria di un normale UITabBarController, poiché tutti i controller di visualizzazione figlio vengono caricati non appena viene caricata l'app, piuttosto che quando vengono visualizzati per la prima volta.

  • Questa configurazione porterà alla barra delle schede viene nascosta quando dettaglio è illustrato nella (ritratto) modalità iPhone. Questo era quello che mi voluto, ed è il comportamento nella applicazione Facebook Messenger troppo, ma se si desidera che la barra delle schede per essere sempre visibili, questo metodo non lo farà.

Problemi correlati