В двух словах
Размотки перехода (иногда называемый выход Segue ) можно использовать для перемещения вперед через толчок, модальные или поповер перетекает (как если бы вы совали навигационный элемент из панели навигации, закрыли поповер или отклонили модально представленный контроллер представления). Кроме того, вы можете развернуть не только один, но и несколько сегментов push / modal / popover, например, «вернуться назад» на несколько шагов в иерархии навигации с помощью одного действия раскрутки.
Когда вы выполняете процедуру раскрутки, вам нужно указать действие, которое является методом действия контроллера представления, к которому вы хотите раскрутиться.
Objective-C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
Swift:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
Имя этого метода действия используется, когда вы создаете сценарий раскрутки в раскадровке. Кроме того, этот метод вызывается как раз перед тем, как выполняется процесс раскрутки. Вы можете получить контроллер представления источника из переданного UIStoryboardSegue
параметра для взаимодействия с контроллером представления, который инициировал переход (например, для получения значений свойств модального контроллера представления). В этом отношении метод имеет функцию, аналогичную prepareForSegue:
методу UIViewController
.
Обновление iOS 8: сегменты Unwind также работают с адаптивными сегментами iOS 8, такими как Show and Show Detail .
Пример
Давайте рассмотрим раскадровку с контроллером навигации и тремя контроллерами дочернего представления:
Из Green View Controller вы можете развернуть (перейти назад) в Red View Controller. От Blue вы можете раскрутиться в Green или Red через Green. Чтобы включить разматывание, вы должны добавить специальные методы действий в красный и зеленый, например, вот метод действия в красном:
Objective-C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
Swift:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
После добавления метода действия вы можете определить последовательность раскрутки в раскадровке, перетаскивая элемент управления на значок «Выход». Здесь мы хотим раскрутить Red с Green при нажатии кнопки:
Вы должны выбрать действие, которое определено в контроллере представления, к которому вы хотите вернуться:
Вы также можете размотаться в Red from Blue (который находится в двух шагах от стека навигации). Ключ выбирает правильное действие размотки.
Перед выполнением последовательности действий вызывается метод действия. В этом примере я определил переход от Red к Green и Blue. Мы можем получить доступ к источнику раскрутки в методе действия через параметр UIStoryboardSegue:
Objective-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!");
}
}
Swift:
@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")
}
}
Разматывание также работает через комбинацию push / модальных сегментов. Например, если бы я добавил еще один контроллер представления Yellow с модальным переходом, мы могли бы вернуться от Yellow до Red за один шаг:
Разматывание из кода
Когда вы определяете последовательность раскручивания путем перетаскивания элемента управления на символ Выход из контроллера представления, в структуре документа появляется новая последовательность:
Выбор перехода и переход к инспектору атрибутов открывает свойство «Идентификатор». Используйте это, чтобы дать уникальный идентификатор вашей теме:
После этого процесс раскрутки может быть выполнен из кода, как любой другой переход:
Objective-C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
Swift:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
илиpopViewControllerAnimated:
достичь одного и того же?