5

Ho riscontrato un problema relativo a Navigationcontroller in AppDelegate. Sto utilizzando uno storyboard, che assomiglia a questo:Come utilizzare Navigationcontroller personalizzato in AppDelegate utilizzando uno storyboard

Storyboard

Come risultato di utilizzando le notifiche push, ho la seguente funzione nel mio AppDelegate File:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
//... 
} 

Quando il arriva la notifica Voglio inizializzare la "Vista dettagliata" - Controller che ha bisogno di un ID come parametro. Questo ID è parte del mio carico utile quindi è presente in didReceiveRemoteNotification.

mi piacerebbe al follwing:

DetailView *detail = [storyboard instantiateViewControllerWithIdentifier:@"detail"]; 

detail.conversationID = theID; 

[self.navigationController pushViewController:detail animated:YES]; 

La mia domanda a questo punto è: come posso ottenere il controller di navigazione? Ho cercato una funzione come "getNavigationControllerByIdentifier" o qualcosa del genere, ma non ho trovato nulla. Non riesco a creare un'istanza del controller di visualizzazione dei dettagli direttamente perché manca la barra di navigazione.

Spero che tu capisca cosa voglio dire - se si pensa il mio approccio è completamente sbagliato per favore correggetemi; o)

Solo un altro piccolo informazioni: Non è importante per me che il pulsante Indietro nel dettaglio View Controller va torna alla vista tabella: è sufficiente quando si collega al controller con il pulsante "Carica vista tabella".

Grazie per l'aiuto!

risposta

8

UINavigationController è una sottoclasse UIViewController e può anche essere assegnato un identificatore nello storyboard.

Utilizzare -instantiateViewControllerWithIdentifier: per creare il UINavigationController ed è il controller di visualizzazione radice. Potrebbe essere necessario istanziare tutti i controller intermedi nel codice e modificare la proprietà viewControllers del controller di navigazione per impostare lo stack di navigazione appropriato. In questo modo, quando l'app si avvia nella visualizzazione dei dettagli, possono tornare indietro come se avessero premuto manualmente fino all'interfaccia.

+0

Grazie. Ora è chiaro e funziona :-) (Bounty è disponibile solo in 10 ore quindi non preoccuparti; o)) –

4

È possibile utilizzare rootViewController sull'oggetto della finestra.

UIViewController *rootViewController = self.window.rootViewController; 
// You now have in rootViewController the view with your "Hello world" label and go button. 

// Get the navigation controller of this view controller with: 
UINavigationController *navigationController = rootViewController.navigationController; 

// You can now use it to push your next view controller: 
DetailViewController *detail = [navigationController.storyboard instantiateViewControllerWithIdentifier:@"detail"]; 
detail.conversationID = theID; 
[navigationController pushViewController:detailViewController animated:YES];