2013-11-20 20 views
7

Quello che voglio fare sembra piuttosto semplice, ma non riesco a trovare alcuna risposta sul web. Ho la schermata di login come controller della vista radice e quindi il controller della barra delle linguette e in ogni scheda ho un controller di navigazione.Come tornare al controller di visualizzazione radice nello storyboard?

ho usato storyboard e la gerarchia viene descritto di seguito,

Root VC 
    | 
    --- tabbar controller 
      | 
      ---Navigation Controller 
       | 
       --- VC1 

requisito è di navigare indietro al controller della vista radice da VC1. Come possiamo raggiungere questo risultato?

+2

è necessario utilizzare un segue rilassarsi per fare questo. – rdelmar

+0

Grazie per la tua risposta @rdelmar, ho accettato la tua soluzione. Ma il problema che sto affrontando ora è che non riesco a collegare l'uscita del pulsante per uscire dal pulsante dello storyboard per svolgerlo. Non era accessibile, a quanto pare. Potete per favore aiutarmi su questo. –

+0

Guarda la mia risposta qui (http://stackoverflow.com/questions/16158586/app-running-slow-after-loading-viewcontroller-then-unload-about-15-20-times/16160239#16160239), e vedi se è così che stai cercando di farlo. – rdelmar

risposta

3

Ho ottenuto la risoluzione dei problemi utilizzando "Unwind Segues".

Passaggio 1) Il minimo necessario è la sottoclasse del controller di visualizzazione per la vista di destinazione (ovvero una vista che è stata visualizzata in precedenza nella navigazione e si desidera svolgerla) e aggiungere un metodo come questo ad esso (il nome del metodo può essere tutto quello che vuoi, ma dovrebbe essere unico, perché tutti segues distendersi in tutta la tua app sono elencati insieme):

- (IBAction)unwindToViewControllerNameHere:(UIStoryboardSegue *)segue { 
//nothing goes here 
} 

Fase 2) Ora, nella vostra vista origine (alias, l'opinione che da cui vuoi partire) trascina semplicemente un punto seguito dal tuo pulsante o qualsiasi altra cosa fino alla piccola icona verde "ESCI" nella parte inferiore della vista sorgente. Ora dovrebbe esserci un'opzione per connettersi a "- unwindToViewControllerNameHere"

Ecco, i tuoi passi si terranno quando si preme il pulsante. E possiamo passare a qualsiasi controller di visualizzazione che vogliamo e il resto della vista verrà rilasciato dai controller.

0

Usa seguente codice

- (void) forRootViewCon { 
    UINavigationController *nav = (UINavigationController*) self.view.window.rootViewController; 
    UIViewController *root = [nav.viewControllers objectAtIndex:0]; 
    [root performSelector:@selector(returnToRoot)]; 
} 

nome del metodo di chiamata è returnToRoot

- (void)returnToRoot { 
    [self dismissViewControllerAnimated:NO completion:nil]; 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 

O

[self.navigationController popToRootViewControllerAnimated:YES]; 
0

Questo dovrebbe essere sufficiente.

[self.navigationController popToRootViewControllerAnimated:YES]; 
0

Si dovrebbe abilitare il VC Root nel controller di navigazione:

--- Navigation Controller - | Root VC | --- controller tabbar | --- VC1

e quindi chiamare

[navController popToRootViewControllerAnimated:YES]; 

EDIT: Credo di avere problemi tra cui un controller TabBar all'interno di un controller di navigazione?

+0

Grazie per la risposta, ma voglio sapere sulla navigazione nel controller Tabbar. Penso che non sia bello avere la gerarchia come NavigationController -> controller tabbar -> Controller di navigazione. Apple non lo suggerirà. –

+0

Ho un Root VC nel controller di navigazione, ma lo nascondo. Come andare alla vista principale? – Gank

2

Se si dispone di gerarchia controller come

--- Navigation Controller - | Root VC | --- controller tabbar | --- Controller di navigazione - | --- VC1

e c'è un UIButton in VC1, eccetera scatto di che si desidera spostare a viewcontroller radice (root VC), quindi utilizzare:

-(void)moveToRootViewController { 

    //Move to root viewController 
    UINavigationController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainnav"]; 

    self.view.window.rootViewController = controller; 

} 

qui mainnav è identificatore storyboard di viewcontroller radice Controller di navigazione.

ViewControllers hierarchy

secondo l'immagine viewcontroller colore bianco è un viewcontroller radice e tabBarController avere 2 schede con controller di navigazione e se si desidera spostare a viewcontroller radice dalla seconda scheda viewcontroller UIButton (colore nero) clicca quindi utilizzare il sopra codice.

Se si dispone di gerarchia come --- Controller di navigazione - | Root VC | --- VC1 ---- | --- VC2 ---- |

e vogliono passare a radice viewcontroller (Root VC) da VC1 o da VC2 quindi utilizzare:

[self.navigationController popToRootViewControllerAnimated:YES]; 
Problemi correlati