Ответ 1
Точка segueWithIdentifier:source:destination:performHandler:
- Предоставьте альтернативу
UIViewController performSegueWithIdentifier:sender
в тех случаях, когда вы также хотите создать настраиваемый переход, не создавая подкласс segue. - Vend segue, который может использоваться как возврат для
segueForUnwindingToViewController:fromViewController:identifier
Как отмечалось выше, этот подход является только жизнеспособным для сегментов, которые вы бы назвали вручную, т.е. не для сегментов, которые в противном случае запускались бы через триггеры IB.
Так, например, если у вас есть segue, который должен быть запущен после определенного периода ожидания (например, пользовательский экран блокировки), вы можете использовать segueWithIdentifier:source:destination:performHandler:
для обработки пользовательского перехода.
-(void)appTimeoutLockScreen
{
UIStoryboardSegue *segue =
[UIStoryboardSegue segueWithIdentifier:@"LockScreenSegue"
source:sourceVC
destination:destinationVC
performHandler:^{
// transition code that would
// normally go in the perform method
}];
// Dev is responsible for calling prepareForSegue and perform.
// Note, the order of calls for an IB triggered segue as well as
// a performSegueWithIdentifier segue is perform first, then
// prepareForSegue:sender. Manual segues need to inverse the call
// in order to ensure VC setup is finished before transition.
[self prepareForSegue:segue sender:self];
[segue perform];
}
Другое практическое применение метода - разматывание сегментов. Использование аналогичного сценария в предыдущем примере мы могли бы использовать его для возврата segue для перехода с экрана блокировки обратно на предыдущий viewController:
-(UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController*)toVC
fromViewController:(UIViewController *)fmVC
identifier:(NSString *)identifier
{
UIStoryboardSegue *segue =
[UIStoryboardSegue segueWithIdentifier:@"FromLockScreenSegue"
source:fmVC
destination:toVC
performHandler:^{
// transition code
}];
return segue;
}