Обнаружить отклонение поповера в iOS8

В своем iPad-приложении я подключил UIButton к другому контроллеру UIView, просто перетаскивая Storyboard и выбрав popover в качестве segue. Все работает нормально, но пользователь может отклонить всплывающее окно, коснувшись только где-нибудь, кроме правого всплывающего окна.

Как я могу определить, что всплывающее окно отклонено в iOS8? В iOS7 я мог бы просто использовать UIPopoverDelegate -popoverDidDidmiss...

Но это больше не работает!? Я много гуглил, но не смог найти никакого решения.

4 ответа

Вы положили

-(void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController

в UIViewController, где находится стартовый UIButton? (не в другом поповерном UIViewcontroller?) Это хорошо работает для меня с iOS 8.1...

Вы должны делегировать начальный UIViewController для этого.

В iOS8 это использует UIPopoverPresentationController UIViewController, чтобы представить popover. (При желании вы все еще можете использовать старый UIPopoverController для создания всплывающего окна вручную.

Если вы используете раскадровку на iOS8, вы можете установить делегат popoverPresentationController UIViewController для обработки следующих действий:

  • popoverPresentationControllerShouldDismissPopover:
  • popoverPresentationControllerDidDismissPopover:

Я предполагаю, что вы правильно задали делегат, но сохраняете ли вы поповер, то есть назначаете ли он сильное свойство? В ios7, если вы не сохранили всплывающее окно, вы получите исключение: "[UIPopoverController dealloc] достигнуто, пока всплывающее окно все еще видно". В ios8 это больше не так, поэтому вы получаете рабочий поповер и можете его отклонить, но методы делегата больше не вызываются.

(Честно говоря, я не уверен, почему это так. Я бы предположил, что по крайней мере "следует отклонить popover" должен быть вызван в любом случае).

Вы, вероятно, должны использовать UIPopoverControllerDelegate и метод

popoverControllerDidDismissPopover:

чтобы выполнить то, что вам нужно.

Другие вопросы по тегам