W skrócie
Odpoczynek segue (czasami nazywane wyjściem segue ) może być używany do nawigacji z powrotem przez Push, modalnych lub popover segues (jakbyś wpadł element nawigacyjny z paska nawigacyjnego, zamknął popover lub oddalił modally przedstawione kontroler widoku). Co więcej, możesz odprężyć się nie tylko za pomocą jednego, ale również szeregu poleceń push / modal / popover, np. „Cofnij się” o kilka kroków w hierarchii nawigacji za pomocą pojedynczej operacji cofania.
Kiedy wykonujesz segment odwijania, musisz określić akcję, która jest metodą akcji kontrolera widoku, do której chcesz się odprężyć.
Cel C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
Szybki:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
Nazwa tej metody akcji jest używana podczas tworzenia odwijanego segmentu w serii ujęć. Ponadto metoda ta jest wywoływana tuż przed wykonaniem segue odwijania. Możesz pobrać źródłowy kontroler widoku z przekazanego UIStoryboardSegue
parametru do interakcji z kontrolerem widoku, który zainicjował segue (np. Aby uzyskać wartości właściwości modalnego kontrolera widoku). Pod tym względem metoda ma podobną funkcję jak prepareForSegue:
metoda UIViewController
.
Aktualizacja iOS 8: Sekwencje odwijania działają również z sekwencjami adaptacyjnymi iOS 8, takimi jak Pokaż i Pokaż szczegóły .
Przykład
Daj nam scenorys z kontrolerem nawigacyjnym i trzema kontrolerami widoku potomnego:
Z kontrolera Green View możesz odpocząć (nawigacja wstecz) do kontrolera Red View. Z niebieskiego możesz odpocząć do zielonego lub do czerwonego przez zielony. Aby włączyć odwijanie, musisz dodać specjalne metody akcji do czerwonego i zielonego, np. Oto metoda akcji w czerwonym:
Cel C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
Szybki:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
Po dodaniu metody akcji możesz zdefiniować odwijanie w serii ujęć, przeciągając klawiszem Control na ikonę Wyjdź. Tutaj chcemy zrelaksować się do czerwonego z zielonego po naciśnięciu przycisku:
Musisz wybrać akcję zdefiniowaną w kontrolerze widoku, w którym chcesz się zrelaksować:
Możesz także odprężyć się na kolor czerwony z niebieskiego (który znajduje się „dwa kroki dalej” na stosie nawigacji). Kluczem jest wybranie właściwej akcji odwijania.
Przed wykonaniem segmentu odwijania wywoływana jest metoda akcji. W tym przykładzie zdefiniowałem odejście do czerwonego od zielonego i niebieskiego. Możemy uzyskać dostęp do źródła odwijania w metodzie akcji za pomocą parametru UIStoryboardSegue:
Cel C:
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
UIViewController* sourceViewController = unwindSegue.sourceViewController;
if ([sourceViewController isKindOfClass:[BlueViewController class]])
{
NSLog(@"Coming from BLUE!");
}
else if ([sourceViewController isKindOfClass:[GreenViewController class]])
{
NSLog(@"Coming from GREEN!");
}
}
Szybki:
@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {
if let blueViewController = unwindSegue.sourceViewController as? BlueViewController {
println("Coming from BLUE")
}
else if let redViewController = unwindSegue.sourceViewController as? RedViewController {
println("Coming from RED")
}
}
Odwijanie działa również poprzez kombinację sekwencji push / modal. Np. Jeśli dodam inny kontroler widoku żółtego z modalnym segmentem, moglibyśmy odprężyć się od żółtego aż do czerwonego w jednym kroku:
Odwijanie z kodu
Po zdefiniowaniu segregacji odwijania poprzez przeciągnięcie czegoś do symbolu wyjścia kontrolera widoku, nowy kontur pojawia się w konspekcie dokumentu:
Wybranie segmentu i przejście do Inspektora atrybutów ujawnia właściwość „Identyfikator”. Użyj tego, aby nadać unikatowemu identyfikatorowi swój identyfikator:
Następnie można wykonać odwijanie segue z kodu, tak jak każdy inny segment:
Cel C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
Szybki:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
lub nie mogąpopViewControllerAnimated:
osiągnąć tego samego?