Qualcuno sa a cosa serve la nuova icona Exit quando si modificano gli storyboard utilizzando Xcode 4.5?


100

Facendo clic con il pulsante destro del mouse sull'icona Esci si ottiene una finestra vuota. Non è possibile tenere premuto il tasto Ctrl su una connessione a qualsiasi elemento IB o file sorgente corrispondente. I documenti non danno amore. Non appare nei file pennino, solo negli storyboard. La mia ipotesi è che sia un corollario di segues, ma non vedo nuovi metodi per sostenerlo. Chiunque?



Possibile duplicato di Xcode 4.5 Storyboard 'Exit'
Tamás Sengel

Risposte:


104

Ci sono molte informazioni nel video WWDC "Sessione 407 - Adozione di storyboard nella tua app".

Supponi di avere due controller di visualizzazione collegati da un segue. Implementa la seguente azione di uscita sul primo controller di visualizzazione:

- (IBAction)done:(UIStoryboardSegue *)segue {
    NSLog(@"Popping back to this view controller!");
    // reset UI elements etc here
}

Quindi, nella scena Storyboard per il secondo controller di visualizzazione, trascinare tenendo premuto il tasto Ctrl da un elemento dell'interfaccia utente, ad esempio un pulsante, all'icona di uscita nella parte inferiore di questo controller di visualizzazione. L' done:azione che hai aggiunto al codice del primo controller apparirà come un'opzione. Ora, attivando il pulsante che hai trascinato con Ctrl sull'icona di uscita tornerà al primo controller di visualizzazione e manterrà il suo stato originale (cioè gli elementi dell'interfaccia utente come l'immissione di testo presumibilmente ancora intatti).


3
In realtà si riavvia alla stessa identica istanza del controller di visualizzazione (e delle sue visualizzazioni).
Jon Hess,

Grazie, stavo leggendo questo solo per sapere di cosa trattava "l'uscita verde", solo per scoprire che risolveva un problema per me. Avevo 2 controller di visualizzazione separati da un controller TabBar e un controller di navigazione e "Pop" non funzionava per tornare indietro. Ci sono voluti 2 minuti e tutto ha funzionato come hai detto! GRAZIE!
user589642

Come posso richiamare il metodo di azione sul Donepulsante nella classe di visualizzazione B prima di tornare alla visualizzazione A?
esperto

Se guardi il video del WWDC puoi saltare a 37:15 per vedere la parte su "
unfind segues

220

Ho avuto difficoltà a seguire la risposta accettata, quindi ecco più dettagli.

Data la foto sotto sul controller di visualizzazione C è possibile "uscire" da qualsiasi controller di visualizzazione nel percorso segue.

inserisci qui la descrizione dell'immagine

ViewController A puoi scrivere:

- (IBAction)done:(UIStoryboardSegue *)segue {
    // Optional place to read data from closing controller
}

ViewController B puoi scrivere:

- (IBAction)back:(UIStoryboardSegue *)segue {
    // Optional place to read data from closing controller
}

ViewController C controlli trascina dal pulsante "indietro" all'opzione di uscita verde e seleziona indietro: ViewController C controlli trascina dal pulsante "fatto" all'opzione di uscita verde e seleziona fatto: inserisci qui la descrizione dell'immagine

Nota: anche se i metodi si trovano su altri controller di visualizzazione, vengono visualizzati all'uscita di ViewController C. Il controllo del trascinamento e della selezione di un metodo definisce a quale ViewController rilassarsi.


2
Un'altra nota: a volte il pulsante di uscita verde non è attivo anche se tutti i passaggi sono stati eseguiti. In questo caso la riapertura dello storyboard (o del progetto xcode) lo fa funzionare come previsto.
zxcat

3
Un altro problema che ho avuto è stato il fatto che non ho inserito la firma del metodo di svolgimento segue nel file .h o nell'estensione della classe. Dopo averlo aggiunto, nel popup è stato visualizzato il seguito di svolgimento.
Steve Moser

2
+ Infinity forEven though the methods are on other view controllers they show up for the ViewController C's exit.
Babbo Natale

15

Oltre alla risposta di Eric, ecco come funziona:

La funzione che aggiungi al controller di destinazione ha il seguente aspetto:

@IBAction func backFromOtherController(segue: UIStoryboardSegue) {
    NSLog("I'm back from other controller!")
}
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.