Я столкнулся с проблемой при попытке развернуться с помощью пользовательского перехода от контроллера представления, который был добавлен как дочерний элемент к другому контроллеру представления.
Вот MyCustomSegue.m:
- (void)perform
{
if (_isPresenting)
{
//Present
FirstVC *fromVC = self.sourceViewController;
SecondVC *toVC = self.destinationViewController;
toVC.view.alpha = 0;
[fromVC addChildViewController:toVC];
[fromVC.view addSubview:toVC.view];
[UIView animateWithDuration:1.0 animations:^{
toVC.view.alpha = 1;
//fromVC.view.alpha = 0;
} completion:^(BOOL finished){
[toVC didMoveToParentViewController:fromVC];
}];
}
else
{
//Dismiss
}
}
А вот и мой FirstVC.m:
- (void)prepareForSegue:(MyCustomSegue *)segue sender:(id)sender
{
segue.isPresenting = YES;
}
- (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
{
return self;
}
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier
{
return [[MyCustomSegue alloc] initWithIdentifier:identifier source:fromViewController destination:toViewController];
}
- (IBAction)unwindToFirstVC:(UIStoryboardSegue *)segue
{
NSLog(@"I am here");
}
Все необходимые соединения также выполняются в раскадровке.
Моя проблема в том, что -segueForUnwindingToViewController:
никогда не вызывается. Как только возвращается -viewControllerForUnwindSegueAction:fromViewController:withSender:
, моя программа вылетает со следующим исключением:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not find a view controller to execute unwinding for <FirstViewController: 0x8e8d560>'
Насколько я понимаю, причина сбоя заключается в том, что я хочу, чтобы мой контроллер представления контейнера обрабатывал действие раскрутки перехода, что невозможно (поскольку контроллер представления контейнера запрашивает только его потомки чтобы справиться с раскруткой.
Это правильно? Что я могу сделать, чтобы решить мою проблему?
Спасибо!