Я реализую пользовательский segue с использованием API-интерфейса контроллера, например.Пользовательский Segue без presentViewController не раскручивается правильно
@implementation CustomSegue
- (void)perform {
UIViewController *sourceViewController = self.sourceViewController;
UIViewController *destinationViewController = self.destinationViewController;
[sourceViewController addChildViewController:destinationViewController];
destinationViewController.view.alpha = 0.0;
[sourceViewController.view addSubview:destinationViewController.view];
[UIView animateWithDuration:0.3 animations:^{
destinationViewController.view.alpha = 1.0;
} completion:^(BOOL finished) {
[destinationViewController didMoveToParentViewController:sourceViewController];
}];
}
@end
иерархии Посмотреть контроллер тривиальна: sourceViewController → destinationViewController
Когда разматывать от destinationViewController
к sourceViewController
, приложение падает в [UIStoryboardUnwindSegueTemplate _perform:]
за исключением Could not find a view controller to execute unwinding for <…>
я не выполнил заказ -[UIViewController viewControllerForUnwindSegueAction:fromViewController:withSender:
или -[UIViewController canPerformUnwindSegueAction:fromViewController:withSender:
что означает рамки возвращает правильные значения (хотя я его однажды выполнил, чтобы проверить).
При замене моего пользовательского кода addChildViewController:…
с помощью presentViewController:…
в segue он отлично работает: разматывание выполняется, как и ожидалось.
Вопрос: возможно ли создать пользовательский сегмент, который создает настраиваемую иерархию диспетчера представлений? Проект случай
Тест: https://bitbucket.org/zats/unwind/
Не думайте, что это решит вашу проблему, но ... У вас действительно должен быть контроллер контейнера, который содержит исходный контроллер, а затем добавить контроллер назначения в контейнер. Затем выполните анимацию, затем удалите исходный контроллер. Немного странно добавлять контроллер назначения к контроллеру источника. Вот пример выполнения, который делает правильные обращения к правильным вещам и изменяет иерархию диспетчера представлений http://pastebin.com/Vk9JfcmP. Может быть, полезно? –
на самом деле это не меняет того факта, что код сбой :) иерархия для меня не так важна в данный момент –
Может быть, что коррумпированная иерархия вызывает проблемы, хотя ... –