Закрытие всплывающего окна, созданного переходом на iOS 9

В Stack Overflow есть много вопросов и ответов по этому поводу, но они действительны только для iOS 8 и более ранних версий.

В iOS 9 многие вещи устарели, и ответы на SO больше не работали.

Сказал, что я представляю поповер, выполняя такой переход.

[self performSegueWithIdentifier:@"myPopover" sender:self];

Этот переход создается между текущим viewController и viewController, используемым всплывающим окном. Кнопка не задействована. Всплывающее окно привязано к представлению.

Проблема в том, что на prepareForSegue:identifier

[segue destinationViewController]

это UIViewController и

[[segue destinationViewController] popoverPresentationController]

это новый UIPopoverPresentationController, и этот объект больше не предлагает отклонить API.

Вместо этого мы должны использовать

[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 и вызвать его из контроллера представления представления, но это приводит к сбою приложения.


person Duck    schedule 09.12.2015    source источник
comment
см. эту ссылку, которая может вам помочь stackoverflow.com/questions/28719306/   -  person Anbu.Karthik    schedule 09.12.2015
comment
Или это stackoverflow.com/questions/33468698/   -  person iAnurag    schedule 09.12.2015
comment
@iAnurag - вопрос, который вы упомянули, ничего не говорит мне о том, что я спросил ... как уволить отсутствие.   -  person Duck    schedule 09.12.2015
comment
@ Anbu.Karthik - self presentingViewController дает мне ноль внутри контроллера всплывающего окна.   -  person Duck    schedule 09.12.2015
comment
В каком классе находится ваш метод keyboardWillHide:?   -  person jcaron    schedule 09.12.2015
comment
Только что попробовал, вроде все отлично работает. Какова ваша иерархия контроллеров представления (контроллеры навигации и т. д.)? Правильно ли вы вызываете dismissViewControllerAnimated:completion на том же контроллере представления, который представил всплывающее окно? Убедитесь, что нет путаницы между дочерним контроллером представления и контроллером навигации. Вы также можете зарегистрировать presentingViewController контроллера всплывающего окна для проверки.   -  person jcaron    schedule 09.12.2015


Ответы (1)


Только что попробовал, вроде все отлично работает.

  • Какова ваша иерархия контроллеров представления (контроллеры навигации и т. д.)?
  • Правильно ли вы вызываете dismissViewControllerAnimated:completion: на том же контроллере представления, который представил всплывающее окно?
  • Убедитесь, что нет путаницы между дочерним контроллером представления и контроллером навигации.
  • Вы также можете зарегистрировать presentingViewController контроллера всплывающего окна для проверки.
person jcaron    schedule 09.12.2015