Czy ktoś wie, do czego służy nowa ikona wyjścia podczas edycji scenorysów za pomocą Xcode 4.5?


100

Kliknięcie prawym przyciskiem myszy ikony Zakończ powoduje wyświetlenie pustego okna. Nie można przeciągnąć połączenia z naciśniętym klawiszem Ctrl do żadnych elementów IB ani odpowiednich plików źródłowych. Dokumenty nie dają miłości. Nie pojawia się w plikach nib, tylko w scenorysach. Moje założenie jest takie, że jest to konsekwencja płynności, ale nie widzę żadnych nowych metod, aby to wykonać. Ktoś?



Odpowiedzi:


104

W filmie WWDC „Sesja 407 - Adopting Storyboards in your App” jest dużo informacji.

Załóżmy, że masz dwa kontrolery widoku połączone płynnie. Zaimplementuj następującą akcję wyjścia na pierwszym kontrolerze widoku:

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

Następnie, w scenie Storyboard dla drugiego kontrolera widoku, przeciągnij klawisz Ctrl z elementu interfejsu użytkownika, takiego jak przycisk, do ikony wyjścia u dołu tego kontrolera widoku. done:Akcja została dodana do kodu pierwszego kontrolera pojawi się jako opcja. Teraz aktywacja przycisku przeciągniętego przez Ctrl do ikony wyjścia spowoduje powrót do pierwszego kontrolera widoku i zachowanie oryginalnego stanu (tj. Elementy interfejsu użytkownika, takie jak wprowadzanie tekstu, rzekomo nadal nienaruszone).


3
W rzeczywistości powraca do dokładnie tej samej instancji kontrolera widoku (i jego widoków).
Jon Hess,

Dzięki, czytałem to tylko po to, aby dowiedzieć się, o co chodzi w „Zielonym wyjściu”, tylko po to, aby dowiedzieć się, że rozwiązuje problem za mnie. Miałem 2 kontrolery widoku oddzielone kontrolerem TabBar i kontrolerem nawigacji, a „Pop” nie działał, aby wrócić do tyłu. Zajęło to 2 minuty i wszystko działało tak, jak powiedziałeś! DZIĘKI!
user589642

Jak mogę wywołać metodę akcji na Doneprzycisku w klasie widoku B przed wyjściem z powrotem do widoku A?
ekspert

Jeśli obejrzysz wideo WWDC, możesz przeskoczyć do 37:15, aby zobaczyć część o „
odprężaniu

220

Trudno mi było zastosować zaakceptowaną odpowiedź, więc tutaj jest więcej szczegółów.

Biorąc pod uwagę poniższe zdjęcie na kontrolerze widoku C, możesz „wyjść” z powrotem do dowolnego kontrolera widoku na ścieżce przejścia.

wprowadź opis obrazu tutaj

ViewController A możesz napisać:

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

ViewController B możesz napisać:

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

ViewController C kontrolujesz przeciąganie z przycisku "wstecz" do zielonej opcji wyjścia i wybierasz wstecz: ViewController C kontrolujesz przeciąganie z przycisku "gotowe" do zielonej opcji wyjścia i wybierasz gotowe: wprowadź opis obrazu tutaj

Uwaga: Mimo że metody znajdują się na innych kontrolerach widoku, są one wyświetlane dla ViewController C zjazdu „s. Sterowanie przeciąganiem i wybieraniem metody definiuje, do którego ViewController ma się rozwinąć.


2
Jeszcze jedna uwaga: czasami zielony przycisk wyjścia nie jest aktywny, nawet wszystkie kroki są wykonane. W takim przypadku ponowne otwarcie scenorysu (lub projektu xcode) sprawia, że ​​działa zgodnie z oczekiwaniami.
zxcat

3
Innym problemem, który miałem, było to, że nie umieściłem mojego podpisu metody odwijania segue w moim pliku .h lub rozszerzeniu klasy. Po dodaniu tego rozwinięcia płynność pojawiła się w wyskakującym okienku.
Steve Moser

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

15

Jako dodatek do odpowiedzi Erica, oto jak to działa:

Funkcja, którą dodajesz do kontrolera docelowego wygląda następująco:

@IBAction func backFromOtherController(segue: UIStoryboardSegue) {
    NSLog("I'm back from other controller!")
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.