Weiß jemand, wofür das neue Exit-Symbol beim Bearbeiten von Storyboards mit Xcode 4.5 verwendet wird?

100

Wenn Sie mit der rechten Maustaste auf das Symbol Beenden klicken, wird ein leeres Fenster angezeigt. Eine Verbindung zu IB-Elementen oder entsprechenden Quelldateien kann nicht bei gedrückter Strg-Taste gezogen werden. Docs geben keine Liebe. Erscheint nicht in NIB-Dateien, sondern nur in Storyboards. Ich gehe davon aus, dass dies eine Folge von Segues ist, aber ich sehe keine neuen Methoden, um dies zu sichern. Jemand?

rsswtmr
quelle

Antworten:

104

Das WWDC-Video "Sitzung 407 - Übernahme von Storyboards in Ihre App" enthält viele Informationen.

Angenommen, Sie haben zwei Ansichts-Controller, die durch einen Übergang verbunden sind. Implementieren Sie die folgende Exit-Aktion auf dem Controller der ersten Ansicht:

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

Ziehen Sie dann in der Storyboard-Szene für den zweiten Ansichts-Controller bei gedrückter Strg-Taste von einem UI-Element, z. B. einer Schaltfläche, zum Beendigungssymbol am unteren Rand dieses Ansichts-Controllers. Die done:Aktion, die Sie dem Code des ersten Controllers hinzugefügt haben, wird als Option angezeigt. Wenn Sie nun die Schaltfläche aktivieren, die Sie bei gedrückter Strg-Taste auf das Exit-Symbol gezogen haben, kehren Sie zum ersten Ansichts-Controller zurück und behalten ihren ursprünglichen Zustand bei (dh UI-Elemente wie die Texteingabe, die angeblich noch intakt sind).

Cal S.
quelle
3
Es wird tatsächlich auf genau dieselbe Instanz des Ansichtscontrollers (und seiner Ansichten) zurückgespult.
Jon Hess
Danke, ich habe dies gelesen, um zu erfahren, worum es beim "Green Exit" geht, nur um herauszufinden, dass es ein Problem für mich löst. Ich hatte zwei Ansichts-Controller, die durch einen TabBar-Controller und einen Navigations-Controller getrennt waren, und "Pop" funktionierte nicht, um rückwärts zurückzukehren. Dies dauerte 2 Minuten und alles funktionierte wie gesagt! VIELEN DANK!
user589642
Wie kann ich die Aktionsmethode für die DoneSchaltfläche in der Klasse von Ansicht B aufrufen, bevor ich zur Ansicht A zurückkehre?
Experte
Wenn Sie sich das WWDC-Video ansehen, können Sie zu 37:15 springen, um den Teil über "Abwickeln von Segues" zu sehen
Moliveira
220

Es fiel mir schwer, der akzeptierten Antwort zu folgen, daher hier mehr Details.

Mit dem Foto unten auf View Controller C können Sie zu jedem View Controller im Segue-Pfad zurückkehren.

Geben Sie hier die Bildbeschreibung ein

ViewController A, den Sie schreiben können:

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

ViewController B können Sie schreiben:

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

ViewController C Sie steuern das Ziehen von der Schaltfläche "Zurück" zur grünen Exit-Option und wählen Zurück: ViewController C Sie steuern das Ziehen von der Schaltfläche " Fertig " zur grünen Exit-Option und wählen Fertig " : Geben Sie hier die Bildbeschreibung ein

Hinweis: Obwohl sich die Methoden auf anderen View-Controllern befinden, werden sie für den Exit des ViewController C angezeigt . Durch Ziehen und Auswählen einer Methode wird festgelegt, auf welchen ViewController abgewickelt werden soll.

Eric
quelle
2
Noch ein Hinweis: Manchmal ist die grüne Exit-Taste nicht aktiv, obwohl alle Schritte ausgeführt wurden. In diesem Fall funktioniert das erneute Öffnen des Storyboards (oder des Xcode-Projekts) wie erwartet.
zxcat
3
Ein weiteres Problem war, dass ich meine Signatur der Abwicklungs-Segue-Methode nicht in meine .h-Datei oder Klassenerweiterung eingefügt habe. Nachdem ich es hinzugefügt hatte, wurde der Abwicklungsbereich im Popup angezeigt.
Steve Moser
2
+ Unendlichkeit fürEven though the methods are on other view controllers they show up for the ViewController C's exit.
Weihnachtsmann
15

Neben Eric Antwort hier ist, wie es funktioniert::

Die Funktion, die Sie dem Ziel-Controller hinzufügen, sieht folgendermaßen aus:

@IBAction func backFromOtherController(segue: UIStoryboardSegue) {
    NSLog("I'm back from other controller!")
}
jboi
quelle