Я создал пользовательский segue, который представляет контроллер представления внутри контейнера, который очень похож на собственные модальные контроллеры Apple (я реализовал его как подкласс UIViewController).
Теперь я пытаюсь создать пользовательский режим размотки, но я не могу заставить метод -segueForUnwindingToViewController: fromViewController: identifier:
вызываться.
Я также внедрил -viewControllerForUnwindSegueAction: fromViewController: withSender:
в свой контейнер, чтобы я мог указать на правильный контроллер представления (тот, который представил этот модальный), но затем метод, который должен быть запрошен для моего пользовательского разматывания, не вызван нигде.
Прямо сейчас, единственный способ отклонить этот модальный метод - сделать это по методу -returned:
.
Может ли кто-нибудь с успехом сделать это с помощью настраиваемого раскручивания?
EDIT: Немного больше кода и контекста
Мой диспетчер просмотра отключен в раскадровке, а не программно.
У меня есть эти куски кода, связанные с развязками в моих контроллерах:
PresenterViewController.m
Я использую собственный метод для отклонения моих пользовательских модалов здесь (-dismissModalViewControllerWithCompletionBlock:
).
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController
fromViewController:(UIViewController *)fromViewController
identifier:(NSString *)identifier {
return [[MyModalUnwindSegue alloc] initWithIdentifier:identifier
source:fromViewController
destination:toViewController];
}
-(IBAction)returned:(UIStoryboardSegue *)segue {
if ([segue.identifier isEqualToString:@"InfoUnwindSegue"]) {
[self dismissModalViewControllerWithCompletionBlock:^{}];
}
}
MyModalViewController.m
Здесь я использую -viewControllerForUnwindSegueAction: fromViewController: withSender:
, чтобы указать на контроллер представления, на который я должен быть занят.
- (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action
fromViewController:(UIViewController *)fromViewController
withSender:(id)sender {
return self.myPresentingViewController;
}
Поведение, которое я ожидал, заключалось в том, что MyModalViewController был вызван, чтобы указать на контроллер представления, который должен обрабатывать разматывание, а затем этот контроллер представления имел свой метод -segueForUnwindingToViewController: fromViewController: identifier:
, вызываемый до вызова -returned:
.
Прямо сейчас -segueForUnwindingToViewController: fromViewController: identifier:
никогда не вызывается.
Я также должен сказать, что я уже пробовал разные конфигурации. Всюду, когда я возвращаю метод, он не вызывает вызова. Я читал, что я могу подклассифицировать контроллер навигации, а затем он вызван, но я не знаю, как он будет соответствовать моему решению.
РЕДАКТИРОВАТЬ 2: Дополнительная информация
Я проверил, что MyModalViewController имеет свой метод -segueForUnwindingToViewController: fromViewController: identifier:
, когда я хочу отклонить обычный контроллер модального представления, представленный им. Это может быть связано с тем, что он является самым большим UIViewController в иерархии.
После проверки этого я подклассифицировал UINavigationController и вместо этого использовал этот подкласс, чтобы содержать мой PresenterViewController. Я был очень удивлен, заметив, что его метод -segueForUnwindingToViewController: fromViewController: identifier:
также называется.
Я считаю, что этот метод вызвал только контроллеры представлений, которые служат в качестве контейнеров. Это то, что мало для меня имеет смысла, поскольку они не единственные, кто представляет другие контроллеры представлений, их дети также делают это.
Мне не нужно создавать логику в этом подклассе, чтобы выбрать, какой класс segue использовать, поскольку этот класс не знает, что сделали их дети.
Форумы Apple сегодня не работают, поэтому сейчас нет возможности получить поддержку. Если у кого-то есть больше информации о том, как это работает, пожалуйста, помогите! Я думаю, что отсутствие документации для этого является хорошим показателем того, насколько неустойчивым это все еще.