2014-12-22 10 views
17

Sto utilizzando il nuovo iOS 8 UISplitViewController. Se lo eseguo su iPhone, ho il seguente problema:UISplitViewController su iPhone: apre/mostra la vista principale dal controller della vista dettagli

Il mio controller di visualizzazione primario attiva un controller di visualizzazione di dettaglio da mostrare. Il controller della vista dettagli spinge un nuovo controller di visualizzazione allo stack UINavigationController nella vista di dettaglio.

Ora ho il problema se voglio tornare al controller di visualizzazione primario dal nuovo controller di visualizzazione.

Come posso fare questo

[self.navigatonController popToRootViewControllerAnimated:YES]; 

non funziona. Voglio mostrare il controller di visualizzazione principale su iPhone. Quindi devo tornare indietro di due punti.

Qualche idea su come posso farlo?

risposta

0

Ho lo stesso identico problema! Per quanto ho capito, splitViewController "sembra" come un controller di navigazione su iPhone (splitVC "compresso"), ma detailVC NON è più nello stesso stack di navigazione di masterVC. Ecco perché il tuo messaggio "popToRootViewController" non funziona più.

Per il momento, non ho trovato un modo. ti dirò se trovo una soluzione.

8

Ho appena trovato una soluzione sul Developer Forum di Apple: How to manually 'pop' back to MasterViewController in UISplitViewController on iPhone

La vecchia (e forse ancora valido) raccomandazione è quella di lasciare che il Maestro vista intiate il 'pop" Per fare questo il. la vista di dettaglio deve informare la vista principale sulla stampa del pulsante personalizzato.Questo può essere raggiunto definendo un protocollo, dove la vista principale è il delegato e la vista di dettaglio ha una variabile chiamata 'delegato'. Quando il master spinge la vista dettagli imposta questa variabile delegata su auto. Ora la vista di dettaglio ha un gancio per informare la vista principale.

Ciò significa chiamare dal (sub) Regolatore dettaglio vista di un primario metodo di visualizzazione del controller:

(Sub) Particolare View Controller:

UINavigationController *navCon = [self.splitViewController.viewControllers objectAtIndex:0]; 
MyPrimaryViewController *primary = [navCon.viewControllers objectAtIndex:0]; 

[primary popToMaster]; 

Primaria View Controller:

- (void)popToMaster 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 
+0

Sei un genio !!! –

+1

Per semplificare ulteriormente, è possibile sostituire il metodo VC dettaglio con: UINavigationController * navCon = [self.splitViewController.viewControllers objectAtIndex: 0]; [navCon popViewControllerAnimated: YES]; –

+0

Inoltre, in questo caso, sembra che non sia necessario definire un protocollo e impostare MasterVC come delegato di DetailVC, dal momento che è possibile ottenere direttamente il controllo del navController del primaryVC tramite [self.splitViewController.viewControllers objectAtIndex: 0]. Fantastico, comunque! –

29

UIViewControllers hanno una proprietà "splitViewController", quindi è possibile ottenere un riferimento al controller di navigazione appropriato t attraverso questo - e quindi chiama popViewControllerAnimated.

Qui è in Swift (incluso da qualche parte nel controller di vista particolare):

if let navController = splitViewController?.viewControllers[0] as? UINavigationController { 
    navController.popViewControllerAnimated(true) 
} 
+0

Preferisco non rivelare quanto tempo ho sprecato per questo. Grazie mille - questo ha funzionato alla grande per me. –

+0

Grazie, amico! Salvavita! –

+0

Hal-le-lu-ur. Questo non è ovvio. – pulse4life

Problemi correlati