Xcode 4.5 Storyboard 'Beenden'

102

Ich habe gerade Xcode 4.5 für die iOS6-Unterstützung installiert und in meinem Storyboard ein neues Symbol mit dem Namen "Beenden" angezeigt, das unter meinen Ansichts-Controllern zusammen mit "Ersthelfer" usw. aufgeführt ist. Ein kleines grünes Symbol mit der Bezeichnung "Beenden".

Ich kann nichts darauf finden oder herausfinden, wie es verwendet werden kann.

Weiß jemand etwas darüber, wie es funktioniert, wofür es ist?

Josh Kahane
quelle
1
Auf eine ähnliche Frage habe ich diese Antwort gepostet: stackoverflow.com/questions/12569316/… Es hilft zu erklären, wie man die Exit (Unwind) -Funktion verwendet
Eric

Antworten:

72

Dies wird als " Abwicklungssegue " bezeichnet. Leider gibt es bisher keine Dokumentation dafür, außer einer kurzen Erwähnung in der Liste der neuen Funktionen von XCode 4.5, in der es heißt:

Abwicklungssegmente können den Übergang zu vorhandenen Instanzen von Szenen in einem Storyboard ermöglichen

Die gute Nachricht ist, dass es eine Sitzung von WWDC 2012 gibt, in der diese Kreaturen (unter anderem) erklärt werden.

Sie können sich einfach mit Ihren Entwicklerkontodaten im iOS Dev Center von Apple anmelden und dann auf der WWDC 2012- Videoseite "Adopting Storyboard in your App" (es ist das fünfte von oben) ansehen. Die Diskussion über Abwicklungssegmente beginnt um 37:20 Uhr .


Update: Hier finden Sie weitere Informationen zu diesem Thema aus der Apple-Dokumentation

Ein Platzhalterobjekt mit dem Namen Beenden zum Abwickeln von Sequenzen. Wenn ein Benutzer eine untergeordnete Szene schließt, wird der Ansichtscontroller für diese Szene standardmäßig zur übergeordneten Szene abgewickelt (oder zurückkehrt). Dies ist die Szene, die ursprünglich zur untergeordneten Szene übergegangen ist. Das Exit-Objekt ermöglicht es einem Ansichts-Controller jedoch, sich zu einer beliebigen Szene abzuwickeln.

(Von iOS6 docset> Allgemein> Erste Schritte)

Und hier ist ein schönes Beispiel, wie Sie eines implementieren können


Ein weiteres Update:

Hier ist ein technischer Hinweis von Apple zu diesem Thema.

Alladinian
quelle
3
OK, wie benutzt man es? Es wurde versucht, mit der Maus auf das Exit-Objekt am unteren Rand eines Viewcontrollers zu klicken, aber es wurde keine Verknüpfung zu irgendetwas hergestellt.
Shim
4
Grundsätzlich müssen Sie eine Methode für Ihren Abwicklungsbereich definieren und dann eine Verbindung von einem Element zur exitSchaltfläche herstellen, um die Methode auszuwählen, die Sie aufrufen möchten. Sie können finden hier ein Beispiel (ich habe meine Antwort auch aktualisiert , um das Beispiel zu enthalten)
Alladinian
1
-1: Viele Wörter, wenig nützliche Informationen. Nachdem ich dies gelesen und in meiner eigenen App verwendet hatte, schrieb ich diese Antwort, die hoffentlich nützlicher ist: stackoverflow.com/a/25829835/901641
ArtOfWarfare
1
Aus diesem Grund liebe ich nicht vorhandene Apple-Dokumentationen. Mann, da sollte jemand gefeuert werden.
Ente
@SpaceDog Vielleicht ist das passiert, sie wurden alle gefeuert und niemand bleibt übrig, um die Dokumentation zu schreiben: / Ich liebe das WWDC-Video - 2012 ist anscheinend das Jahr, in dem Apple seinen Höhepunkt erreicht hat.
Turing getestet
10

Stellen Sie sich vor, Sie haben eine Abfolge von Ansichten in Ihrem Storyboard:

A -> ... -> Z

Sie möchten eine Schaltfläche anzeigen Z, mit der der Benutzer ganz zurück zu gehen kann A.

Sie müssen also die Ansicht angeben, die Sie bis zu Aeiner Instanzmethode zurücksetzen möchten, die als gekennzeichnet ist IBActionund einen einzelnen Parameter vom Typ enthält UIStoryboardSegue *. Der Name der Methode und der Variablen spielt keine Rolle. Was Sie innerhalb der Implementierung tun, spielt ebenfalls keine Rolle. Hier ist ein Beispiel:

Obj-C:
In A's Schnittstelle (nicht Z' s):

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

In A's Implementierung (nicht Z' s):

- (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:
In A's Quelle (nicht Z' s):

@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.
}

controlZiehen Sie nun in Ihrem Storyboard von einem Element auf Z(IE, eine Schaltfläche zum Abbrechen) auf Z's Exit. Es durchsucht alle Ansichten weiter oben in der Ansichtshierarchie IBAction, die nur eine einzelne UIStoryboardSegue *als Aktion akzeptieren, und listet sie auf, aus denen Sie auswählen können.

Hoffentlich war dies einfacher und hilfreicher als die vorhandenen Antworten. Ich fand, dass dieser Link besonders nützlich war. Wenn es also ein Detail gibt, bei dem Sie nach dem Lesen meiner Antwort immer noch unscharf sind, kann dies Ihnen vielleicht helfen (ich habe versucht, alle nützlichen Informationen aus diesem langen Artikel in einer kurzen Antwort zusammenzufassen): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html

ArtOfWarfare
quelle
4

Siehe auch Storyboard-Abwicklungssegment kann nicht verbunden werden, in dem die Anforderungen für die Aktivierung des Exit-Symbols erläutert werden. Sie müssen weiter oben in der View Controller-Hierarchie eine Methode haben, die:

  1. Als IBAction markiert

  2. Nimmt einen Parameter, der ein UIStoryboardSegue * ist

Wenn beide Bedingungen erfüllt sind, wird es durch das Beenden-Symbol angezeigt und Sie können eine Verbindung herstellen, indem Sie von einer Schaltfläche im selben Ansichts-Controller die Steuerung ziehen.

Ich habe jetzt auch das einfachste Beispiel der Welt hier veröffentlicht:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard (behoben am 12. Juli 2013)

Dies zeigt, wie einfach es jetzt ist, zu einem vorgestellten Ansichts-Controller zu wechseln und von diesem zurückzukehren , im Gegensatz zu all der Arbeit, die Sie zuvor ausführen mussten, um Informationen hin und her zu übergeben (das Material in der Vorlage mit einem Delegaten und einem Protokoll) , die jetzt alle gelöscht werden können).

matt
quelle
3

Fügen Sie der Anforderungsdefinition nur eine leichte Subtilität hinzu, die hilfreich sein könnte. Dies basiert auf Experimenten in Xcode 4.6. Ich fand heraus, dass es spezifisch und nur die Deklaration (!) Der Methode ist, die die gewünschte Control-Drag-Antwort von Xcode ermöglicht. Folgendes habe ich als die vollständigen Anforderungen befunden:

  • Markiert als IBAction
  • Nimmt einen Parameter, der ein UIStoryboardSegue* ist
  • Sie müssen eine Aktion deklarieren (aber nicht unbedingt implementiert haben [dh eine Methode im .MImplementierungsabschnitt]).
  • Es kann in der Schnittstellendeklaration jeder Klasse enthalten sein, sogar im Schnittstellenabschnitt von a .M, mit Ausnahme der appdelegate-Klasse. (Ich habe keine Abhängigkeit von seiner Position in der Controller-Hierarchie festgestellt. Sie können eine beliebige alte Datei hinzufügen, und das System scheint alle Methoden mit dem UIStoryboardSegueParameter zu aggregieren und im Menü des Exit-Symbols anzuzeigen.) Beachten Sie, dass das Steuerelement gezogen wird Das Menü zeigt Ihnen sogar Ihre Methode an, wenn sich die Methode in der Klasse der Szene befindet, die Sie im Storyboard-Editor bearbeiten. Sie wird jedoch ohne Doppelpunkt angezeigt und scheint zur Laufzeit keine Aktion auszulösen.

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

Jack Bellis
quelle