У меня есть контроллер вида, который представлен в popover с помощью раскадровки segue.Storyboard popover уволен, методы делегата не называются
В контроллере представления представления, я имел следующий код:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let svc = segue.destinationViewController as? SettingsViewController {
svc.popoverPresentationController?.delegate = self
}
}
Однако, оказывается, что представленный контроллер представления, несмотря на то, что выглядит как пирог, имеет modalPresentationStyle
от '.Modal
и, следовательно, nil
popoverPresentationController
. Weird!
Итак, я обновил код следующим образом:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let svc = segue.destinationViewController as? SettingsViewController {
svc.modalPresentationStyle = .Popover
svc.popoverPresentationController?.delegate = self
}
}
svc.popoverPresentationController
Делегат теперь устанавливается в порядке, но если поповер освобождается пользователем не коснувшись снаружи, ни один из методов UIPopoverPresentationControllerDelegate
делегата (например, popoverPresentationControllerShouldDismissPopover
являются .?. называется Что я упускаю
Возможно глупый вопрос, вы уверены, что переход установлен как «Present как Поповер "в раскадровке? –
Да, определенно - и он корректно представляет собой popover (и даже до установки 'svc.modalPresentationStyle = .Popover'). Стоит проверить, хотя! –
Одна вещь странная, она должна сказать «Present as Popover», так как просто «Popover» должен быть устаревшим, но я не думаю, что это проблема ... –