Я создал пользовательский сегмент, который представляет контроллер представления внутри контейнера, который очень похож на собственные модальные контроллеры Apple (я реализовал его как подкласс UIViewController).-segueForUnwindingToViewController: fromViewController: идентификатор: не был вызван
Теперь я пытаюсь создать пользовательский режим размотки, но я не могу получить способ -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:
никогда не вызывается.
Должен также сказать, что я уже пробовал разные конфигурации. Всюду, когда я возвращаю метод, он не вызывает вызова. Я читал, что я могу подклассифицировать контроллер навигации, а затем он вызван, но я не знаю, как он будет соответствовать моему решению.
EDIT 2: Дополнительная информация
Я проверил, что MyModalViewController имеет свой -segueForUnwindingToViewController: fromViewController: identifier:
метод вызывается, когда я хочу, чтобы закрыть регулярный модальный контроллер представления, представленный им. Возможно, это потому, что он является самым большим UIViewController в иерархии.
После проверки этого я подклассифицировал UINavigationController и вместо этого использовал этот подкласс, чтобы содержать мой PresenterViewController. Я был очень удивлен, заметив, что его метод -segueForUnwindingToViewController: fromViewController: identifier:
также называется.
Я считаю, что этот метод называется только контроллерами представлений, которые служат в качестве контейнеров. Это то, что не имеет для меня никакого смысла, поскольку они не единственные, кто представляет другие контроллеры представлений, их дети также делают это.
Это не нормально для меня, чтобы создать логику в этом подклассе, чтобы выбрать, какой класс segue использовать, поскольку этот класс не знает, что сделали их дети.
Форумы Apple на данный момент не работают, поэтому нет возможности получить поддержку прямо сейчас. Если у кого-то есть больше информации о том, как это работает, пожалуйста, помогите! Я думаю, что отсутствие документации для этого является хорошим показателем того, насколько неустойчивым это все еще.
Вы хотите просмотреть настоящее или уволить? –
Вам нужно показать код, который вы уже пробовали. – rdelmar
@rdelmar, здесь у вас есть. Скажите, хотите ли вы увидеть какой-либо конкретный код. –