2012-11-06 9 views
6

Ho scritto un numero di applicazioni iOS un anno fa su una vecchia versione di Xcode. Ho appena iniziato un nuovo progetto e ho scoperto la funzione storyboard nell'ultimo Xcode. Si scopre che questo è perfetto per l'applicazione che sto scrivendo dato che consiste di circa 30 schermi interconnessi.Come evitare il ciclo infinito Storyboard modale

La mia domanda è, come faccio a strutturare il mio storyboard e segue per consentire alla mia applicazione di seguire un percorso circolare attraverso i miei schermi. Ho visto un numero di examples che segue semplicemente lo schermo 1 allo schermo 2 e quindi lo schermo 2 allo schermo 1 usando l'opzione modale. Questo funziona chiaramente, ma quando eseguo il debug di un'applicazione creata in questo modo, viene creata un'istanza di una nuova istanza di ogni schermata (controller di visualizzazione) per ogni passaggio eseguito. Nello schema seguente (scusate, ho disegnato una bella immagine ma, a causa del mio status di novizio, non ero in grado di postarla), come passare dallo schermo 1 allo schermo 2 allo schermo 3 e tornare allo schermo originale 1 senza creare un nuovo esempio?

// Screen 1 --> Screen 2 --> Screen3 
// ^      | 
//  |       | 
//  +-------------------------+ 

risposta

3

Ok, ho fatto un bel po 'di ricerca dal porre questa domanda e credo che posso fornire una risposta ragionevole alla domanda. In breve, l'approccio che stavo proponendo nella domanda non è compatibile con il modo in cui funzionano effettivamente storyboard e segues. Segues sempre istanzia una nuova istanza del controller di visualizzazione/vista che mira. Ciò significa che quando passiamo dallo schermo 3 allo schermo 1, stiamo andando a una nuova istanza dello schermo 1, non dell'originale. Per risolvere questo, implementerò lo storyboard in modo leggermente diverso.

// Screen 1 --> Screen 2 
//  | 
//  +------> Screen 3 

Io poi Schermo confiure 1 per ascoltare un messaggio 'schermata successiva' (tramite delegato/protocollo) dallo schermo 2 e 3.

Quando l'utente sullo schermo 1 seleziona il pulsante per lo schermo 2 , lo storyboard e il seguito gestiranno l'istanza modale della schermata 2. Quando l'utente sullo schermo 2 seleziona il pulsante "Schermata successiva", invece di seguire la schermata 3, eliminerò la schermata 2 e avvierò la schermata 1 per avviare la schermata 3 tramite la nuova Schermata 1 -> Schermata 3 segue.

Questo approccio ha il vantaggio di consentire allo schermo 1 di essere il controller principale per tutte le schermate successive nel ciclo (nel mio caso ho 10 schermate/esercizi nel ciclo). L'unico svantaggio è che lo storyboard non riflette bene il flusso degli schermi.

Spero che questo aiuti gli altri a tentare di ottenere la stessa cosa nei loro progetti iOS.