Увольнение Popover, созданного Segue на iOS 9
По этому поводу на Stack Overflow есть много вопросов и ответов, но они действительны только для iOS 8 и более ранних версий.
iOS 9 устарела, и ответы на SO больше не работали.
Сказал, что я представляю поповер, выполняя такую передачу
[self performSegueWithIdentifier:@"myPopover" sender:self];
Этот переход создается между текущим viewController и viewController, используемым popover. Там нет кнопки вовлечены. Поповер привязан к виду.
Проблема в том, что на prepareForSegue:identifier
[segue destinationViewController]
это UIViewController
а также
[[segue destinationViewController] popoverPresentationController]
это новый UIPopoverPresentationController
и этот объект больше не предлагает api dismiss.
Вместо этого мы должны использовать
[self dismissViewControllerAnimated:YES completion:nil];
отклонить поповер, но это не имеет никакого эффекта для меня.
Моя ситуация такова: у меня есть поповер с текстовым полем. Я хочу отклонить поповер, если пользователь прячет клавиатуру.
Итак, я сделал это:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
а потом
- (void)keyboardWillHide:(NSNotification *)notification {
[self dismissViewControllerAnimated:YES completion:nil];
}
но это никак не влияет.
Я также попытался создать функцию раскрутки внутри popover viewController и вызвать ее из представленного контроллера представления, но это приводит к сбою приложения.
1 ответ
Только что попробовал, и все, кажется, работает отлично.
- Какова ваша иерархия контроллеров представления (контроллеры навигации и т. Д.)?
- Вы правильно звоните
dismissViewControllerAnimated:completion:
на том же контроллере представления, который представил поповер? - Убедитесь, что нет никакого смешения между дочерним контроллером представления и контроллером навигации.
- Вы также можете войти в систему контроллера popover view
presentingViewController
Проверять.