Xcode 4.5 Storyboard 'Exit'


102

Ho appena installato Xcode 4.5 per il supporto iOS6 e ho visto una nuova icona chiamata "Exit" nel mio Storyboard, elencata sotto i controller della vista insieme a "First Responder" ecc. Una piccola icona verde etichettata "Exit".

Non riesco a trovare nulla su di esso né a capire come può essere utilizzato.

Qualcuno sa qualcosa al riguardo, come funziona, a cosa serve?


1
Su una domanda simile ho pubblicato questa risposta: stackoverflow.com/questions/12569316/… Aiuta a spiegare come utilizzare la funzione di uscita (relax)
Eric

Risposte:


72

Questo è chiamato " Unwind Segue ". Sfortunatamente, finora non c'è documentazione per questo, tranne una breve menzione sull'elenco delle nuove funzionalità di XCode 4.5 che afferma:

Unwind segues può consentire la transizione a istanze esistenti di scene in uno storyboard

La buona notizia è che c'è una sessione della WWDC 2012 che spiega quelle creature (tra le altre cose).

Puoi semplicemente accedere all'iOS Dev Center di Apple con i dettagli del tuo account sviluppatore, quindi andare alla pagina dei video del WWDC 2012 e guardare "Adopting Storyboard in your App" (è il quinto dall'alto) La discussione sui successivi di relax inizia alle 37:20 .


Aggiornamento: ecco alcune informazioni in più sull'argomento dalla documentazione di Apple

Un oggetto segnaposto denominato Exit per lo svolgimento delle sequenze. Per impostazione predefinita, quando un utente chiude una scena figlio, il controller della vista per quella scena si srotola (o torna) alla scena principale, ovvero la scena che originariamente è passata alla scena figlio. Tuttavia, l'oggetto Exit consente a un controller di visualizzazione di rilassarsi su una scena arbitraria.

(Da iOS6 docset> Generale> Guida introduttiva)

Ed ecco un bell'esempio di come puoi implementarne uno


Un altro aggiornamento:

Ecco una nota tecnica di Apple su questo argomento.


3
OK, quindi come lo usi? Ho provato a fare clic tenendo premuto il tasto Ctrl dall'oggetto di uscita nella parte inferiore di un viewcontroller, ma non si collegava a nulla.
spessore

4
Fondamentalmente devi definire un metodo per il tuo relax segue e quindi connetterti da un elemento al exitpulsante selezionando il metodo che desideri chiamare. Puoi trovare un esempio qui (ho aggiornato anche la mia risposta per includere l'esempio)
Alladinian

1
-1: molte parole, poche informazioni utili. Dopo aver letto su questo e utilizzandolo nella mia app, ho scritto questa risposta che è auspicabilmente più utile: stackoverflow.com/a/25829835/901641
ArtOfWarfare

1
Questo è il motivo per cui amo le documentazioni inesistenti di Apple. Amico, qualcuno dovrebbe essere licenziato lì.
Duck

@SpaceDog Forse è quello che è successo, sono stati tutti licenziati e nessuno è rimasto a scrivere la documentazione: / Adoro il video WWDC però - il 2012 è apparentemente l'anno in cui Apple ha raggiunto il picco.
turingtested l'

10

Immagina di avere una sequenza di visualizzazioni nel tuo storyboard:

A -> ... -> Z

Si desidera visualizzare un pulsante Zche consenta all'utente di tornare indietro fino a A.

Quindi quello che devi fare è dare la vista a cui vuoi tornare indietro fino in fondo, in questo caso A, un metodo di istanza che è contrassegnato come a IBActione accetta un singolo parametro di tipo UIStoryboardSegue *. Il nome del metodo e della variabile non contano. Anche quello che fai durante l'implementazione non ha importanza. Ecco un esempio:

Obj-C:
In A's Interface (non Z' s):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue;

Nell'implementazione di A(non Zdi):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Swift:
nella Afonte (non in quella Z):

@IBAction func cancelSignup(unwindSegue: UIStoryboardSegue) {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Ora, all'interno dello storyboard, controltrascina da un elemento su Z(IE, un pulsante di annullamento) su Zs Exit. Scansionerà tutte le viste più in alto nella gerarchia delle viste che hanno un IBActionche accetta solo una singola UIStoryboardSegue *come azione e le elencherà tra cui scegliere.

Si spera che questo sia stato più semplice e utile delle risposte esistenti. Ho scoperto che questo collegamento è stato particolarmente utile, quindi se c'è un dettaglio su cui sei ancora confuso dopo aver letto la mia risposta, forse questo può aiutarti (ho provato a condensare tutte le informazioni utili di questo lungo articolo in una breve risposta): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html


4

Vedi anche Cannot Connect Storyboard Unwind Segue che chiarisce i requisiti per dare vita all'icona Exit. È necessario disporre, più in alto nella gerarchia del controller di visualizzazione, un metodo che sia:

  1. Contrassegnato come IBAction

  2. Accetta un parametro che è un UIStoryboardSegue *

Se entrambe queste condizioni sono soddisfatte, l'icona Esci lo vedrà e ti consentirà di collegarti ad esso trascinando il controllo da un pulsante nello stesso controller di visualizzazione.

Ho anche postato qui l'esempio più semplice del mondo:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard (risolto il 12 luglio 2013)

Questo mostra quanto sia banalmente facile ora passare e tornare da un controller di visualizzazione presentato, al contrario di tutto il lavoro che dovevi fare in precedenza per passare le informazioni avanti e indietro (le cose nel modello con un delegato e un protocollo , che ora possono essere eliminati).


3

Basta aggiungere una leggera sottigliezza alla definizione dei requisiti che potrebbe aiutare. Questo si basa sulla sperimentazione in Xcode 4.6. Ho scoperto che è specificamente e solo la dichiarazione (!) Del metodo che consente la risposta di trascinamento del controllo desiderata da Xcode. Ecco quali sono i requisiti completi:

  • Contrassegnato come IBAction
  • Accetta un parametro che è un UIStoryboardSegue*
  • Devi avere un'azione dichiarata (ma non necessariamente implementata [che significa un metodo nella .Msezione implementazione]).
  • Può essere nella dichiarazione di interfaccia di qualsiasi classe, anche nella sezione di interfaccia di a .M, tranne che nella classe appdelegate. (Non ho notato alcuna dipendenza dalla sua posizione nella gerarchia del controller. Puoi aggiungere qualsiasi vecchio file e il sistema sembra aggregare tutti i metodi che hanno il UIStoryboardSegueparametro e visualizzarli nel menu dell'icona Esci.) Si noti che il controllo e trascinamento menu ti mostrerà anche il tuo metodo se il metodo è nella classe della scena che stai manipolando nell'editor dello storyboard, ma apparirà senza due punti e non sembra attivare alcuna azione in fase di esecuzione.

Esempio: -(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.