Xcode 4.5 Storyboard „Wyjście”

102

Właśnie zainstalowałem Xcode 4.5 do obsługi iOS6 i zobaczyłem nową ikonę o nazwie „Wyjdź” w moim Storyboard, wymienioną pod moimi kontrolerami widoku wraz z „Pierwsza osoba odpowiadająca” itd. Mała zielona ikona oznaczona jako „Wyjście”.

Mogę coś na nim znaleźć ani wymyślić, jak można go użyć.

Ktoś coś o tym wie, jak to działa, do czego służy?

Josh Kahane
źródło
1
Na podobne pytanie zamieściłem tę odpowiedź: stackoverflow.com/questions/12569316/… Pomaga to wyjaśnić, jak korzystać z funkcji wyjścia (rozwinięcia)
Eric

Odpowiedzi:

72

Nazywa się to „ Unwind Segue ”. Niestety, jak dotąd nie ma dokumentacji na ten temat, z wyjątkiem krótkiej wzmianki o liście nowych funkcji XCode 4.5, która stwierdza:

Rozwinięte fragmenty mogą umożliwić przejście do istniejących wystąpień scen w scenorysie

Dobra wiadomość jest taka, że ​​odbyła się sesja z WWDC 2012 wyjaśniająca (między innymi) te stworzenia.

Możesz po prostu zalogować się do Apple iOS Dev Center, podając dane swojego konta programisty, a następnie przejść do strony z filmami WWDC 2012 i obejrzeć „Adopting Storyboard in your App” (piąte od góry). .


Aktualizacja: Oto więcej informacji na ten temat z dokumentacji Apple

Obiekt zastępczy o nazwie Exit służący do odwijania sekwencji. Domyślnie, gdy użytkownik odrzuci scenę podrzędną, kontroler widoku dla tej sceny rozwija się (lub powraca) do sceny nadrzędnej - to jest sceny, która pierwotnie przeszła do sceny podrzędnej. Jednak obiekt Exit umożliwia kontrolerowi widoku rozwinięcie do dowolnej sceny.

(Z docset iOS6> Ogólne> Pierwsze kroki)

A oto ładny przykład tego, jak możesz go zaimplementować


Kolejna aktualizacja:

Oto notatka techniczna firmy Apple dotycząca tego tematu.

Alladinian
źródło
3
OK, więc jak tego używasz? Wypróbowano kliknięcie z naciśniętym klawiszem Control z obiektu wyjściowego na dole kontrolera widoku, ale nie prowadziło to do niczego.
shim
4
Zasadniczo musisz zdefiniować metodę dla swojego rozwijania płynności, a następnie połączyć się od elementu z exitprzyciskiem, wybierając metodę, którą chcesz wywołać. Przykład możesz znaleźć tutaj (zaktualizowałem również moją odpowiedź, aby uwzględnić przykład)
Alladinian
1
-1: dużo słów, mało przydatnych informacji. Po przeczytaniu tego i wykorzystaniu go w mojej własnej aplikacji, napisałem tę odpowiedź, która, mam nadzieję, jest bardziej użyteczna: stackoverflow.com/a/25829835/901641
ArtOfWarfare
1
Dlatego uwielbiam nieistniejące dokumenty Apple. Człowieku, ktoś powinien tam zostać zwolniony.
Duck
@SpaceDog Może tak właśnie się stało, wszyscy zostali zwolnieni i nikt nie został do napisania dokumentacji: / Uwielbiam jednak wideo WWDC - 2012 to najwyraźniej rok, w którym Apple osiągnął szczyt.
test turinga
10

Wyobraź sobie, że masz sekwencję widoków w swoim storyboardzie:

A -> ... -> Z

Chcesz mieć widoczny przycisk, Zktóry pozwala użytkownikowi przejść z powrotem do A.

Więc to, co musisz zrobić, to dać widok, który chcesz cofnąć aż do, w tym przypadku, Ametody instancji, która jest oznaczona jako a IBActioni przyjmuje pojedynczy parametr typu UIStoryboardSegue *. Nazwa metody i zmienna nie mają znaczenia. Nie ma też znaczenia to, co robisz w ramach implementacji. Oto przykład:

Obj-C: Interfejs
In A(nie Z):

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

W Aimplementacji (nie Z):

- (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: Źródło
In A(nie 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.
}

Teraz w swoim storyboardzie controlprzeciągnij z elementu Z(IE, przycisk anulowania) do Z's Exit. Przeszuka wszystkie widoki wyżej w hierarchii widoków, które mają IBActionakceptację tylko jednego UIStoryboardSegue *jako akcję i wyświetli listę, z której możesz wybrać.

Miejmy nadzieję, że było to prostsze i pomocne niż istniejące odpowiedzi. Okazało się, że ten link był szczególnie przydatny, więc jeśli po przeczytaniu mojej odpowiedzi nadal jesteś niejasny, może to ci pomoże (próbowałem po prostu skondensować wszystkie przydatne informacje z tego długiego artykułu w krótką odpowiedź): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html

ArtOfWarfare
źródło
4

Zobacz także Cannot Connect Storyboard Unwind Segue, w którym wyjaśniono wymagania dotyczące ożywienia ikony wyjścia. Musisz mieć, wyżej w hierarchii kontrolera widoku, metodę, która jest:

  1. Oznaczone jako IBAction

  2. Pobiera jeden parametr, który jest UIStoryboardSegue *

Jeśli oba te warunki zostaną spełnione, ikona wyjścia zobaczy to i pozwoli ci połączyć się z nim przez przeciągnięcie kontrolki z przycisku w tym samym kontrolerze widoku.

Tutaj również zamieściłem najprostszy przykład na świecie:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard (poprawiono 12 lipca 2013)

To pokazuje, jak trywialnie łatwo jest teraz przejść do i z powrotem z kontrolera widoku prezentowanego, w przeciwieństwie do całej pracy, którą musiałeś wykonać wcześniej, aby przekazywać informacje tam iz powrotem (zawartość szablonu z delegatem i protokołem , z których wszystkie można teraz usunąć).

matowe
źródło
3

Może pomóc tylko dodanie odrobiny subtelności do definicji wymagań. Jest to oparte na eksperymentach w Xcode 4.6. Okazało się, że jest to specyficznie i tylko zadeklarowanie (!) Metody, która umożliwia żądaną reakcję sterowania i przeciągania z Xcode. Oto pełne wymagania:

  • Oznaczono jako IBAction
  • Pobiera jeden parametr, który jest UIStoryboardSegue *
  • Musisz mieć zadeklarowaną akcję (ale niekoniecznie zaimplementowaną [co oznacza metodę w .M sekcji implementacji]).
  • Może znajdować się w deklaracji interfejsu dowolnej klasy, nawet w sekcji interfejsu a .M, z wyjątkiem klasy appdelegate. (Nie widziałem żadnej zależności od jego pozycji w hierarchii kontrolera. Możesz dodać dowolny stary plik, a system wydaje się agregować wszystkie metody, które mają UIStoryboardSegueparametr i wyświetlać je w menu ikony Zakończ). menu pokaże nawet twoją metodę, jeśli metoda należy do klasy sceny, którą manipulujesz w edytorze scenariuszy, ale pojawi się bez dwukropka i nie wydaje się wyzwalać żadnej akcji w czasie wykonywania.

Przykład: -(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;

Jack Bellis
źródło