2011-10-25 15 views
18

Sto avendo difficoltà a raggiungere i seguenti obiettivi utilizzando uno storyboard:iOS 5 storyboard, di programmazione determinare percorso

Quando l'installazione non è fatto: run app -> Mostra impostazioni View Controller -> spettacolo principale controller di navigazione Quando l'installazione è fatto: run app -> visualizza controller di navigazione principale

Quindi, fondamentalmente, voglio l'applicazione per iniziare a livello di codice con le impostazioni vista in alcuni casi, e in caso contrario passare direttamente davanti al controller di navigazione principale.

Sono riuscito a mostrare la visualizzazione delle impostazioni con uno stile modale seguito dal controller di navigazione principale, ma non so come visualizzarlo prima del viene visualizzato il controller di navigazione principale. Qualche idea?

risposta

20

Sono riuscito a fare un po 'diverso:

  1. Utilizzare un UINavigationController come il controller della vista iniziale.
  2. Creare un controller di visualizzazione radice che gestirà la decisione di cosa caricare.
  3. Creazione di uno storyboard Segue dal controller della vista radice alla vista principale e alla vista delle impostazioni e fornisce gli identificatori appropriati di segues.
  4. Chiama lo performSegueWithIdentifier con l'identificativo corretto dal controller della vista radice.

Solo un'altra soluzione, spero che questo aiuti.

+0

questo è il modo migliore e più semplice per affrontare il problema che mi sento – carbonr

+0

D'accordo, questa sembra una soluzione migliore. Ho cambiato la risposta accettata. –

+1

Non penso che funzionerà se si utilizza un controller di visualizzazione divisa nell'applicazione: il controller di visualizzazione divisa deve essere la radice iniziale. – radven

29

Per impostazione predefinita, il controller di visualizzazione iniziale dello storyboard principale viene istanziato e visualizzato automaticamente all'avvio dell'app. Per evitare che ciò accada, è necessario rimuovere l'impostazione UIMainStoryboardFile dal file info.plist.

Con nessun controller di visualizzazione predefinito, ora sei libero di crearne uno a livello di programmazione all'avvio dell'app. Vedi lo UIStoryboard documentation. Utilizzare +storyboardWithName:bundle: per caricare lo storyboard e quindi utilizzare –instantiateViewControllerWithIdentifier: per creare il controller di visualizzazione corretto. Dovrai anche creare una UIWindow principale e aggiungere la vista del controller della vista come hai fatto con l'interfaccia utente .nib. Si noti che senza l'impostazione UIMainStoryboardFile non viene creata per voi una finestra principale - leggere lo explanation.

+0

Grazie, rimuovere lo storyboard da info.plist ha fatto il trucco! –

+0

Risposta succinta, grazie :) – Jarrod

+0

Come creare il 'UIWindow' principale? – Siddharth

3

Ho fatto qualcosa di simile ad amoshaviv, il suo consiglio è corretto. L'ho fatto leggermente diverso però, e darò qualche informazione in più. Ho creato una classe MyInitialViewController personalizzata, derivata da UIViewController, e l'ho resa il controller di visualizzazione iniziale. Nel file storyboard, ho creato sequenze modali con nomi appropriati a tutti (nel mio caso tre) possibili controller di visualizzazione "reali" possibili. Nella classe MyInitialViewController, ho implementato il metodo

- (void)viewDidAppear:(BOOL)animated; 

, effettuare prima l'assegno quale vista per passare, e poi fare la corretta

[self performSegueWithIdentifier:@"NameOfSegue" sender:self]; 

Effettivamente, questo rende il MyInitialViewController altro che un interruttore eseguito quando viene visualizzato. Ho provato per la prima volta a fare questo quando caricato perché non mi interessa vedere effettivamente questa vista, ma non ha funzionato, mentre viewDidAppear lo fa.

Per rendere visivamente scorrevole, ho provato quanto segue. Nelle proprietà dei segues, ho disabilitato l'animazione. La vista l'ho lasciata vuota, e ho dato un colore di sfondo corrispondente a quello dell'immagine di avvio.

Problemi correlati