【发布时间】:2016-05-03 03:24:51
【问题描述】:
我有一个视图控制器,它使用情节提要 segue 在弹出窗口中呈现。
在呈现视图控制器中,我有以下代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let svc = segue.destinationViewController as? SettingsViewController {
svc.popoverPresentationController?.delegate = self
}
}
然而,事实证明,呈现的视图控制器,即使它显示为一个弹出框,也有一个 modalPresentationStyle 或 '.Modal,因此是一个 nil popoverPresentationController。诡异的!
所以,我更新代码如下:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let svc = segue.destinationViewController as? SettingsViewController {
svc.modalPresentationStyle = .Popover
svc.popoverPresentationController?.delegate = self
}
}
svc.popoverPresentationController 委托现在设置为 OK,但如果弹出框被用户点击外部关闭,则不会调用任何 UIPopoverPresentationControllerDelegate 委托方法(例如 popoverPresentationControllerShouldDismissPopover。我错过了什么?
【问题讨论】:
-
可能是个愚蠢的问题,你确定故事板中的 segue 设置为“Present as Popover”吗?
-
是的,当然 - 它正确地显示为弹出框(甚至在设置
svc.modalPresentationStyle = .Popover之前就已经显示)。值得检查! -
有一点很奇怪,它应该说“Present as Popover”,因为应该不推荐使用“Popover”,但我认为这不是问题......
-
“Present as Popover”是启用尺寸等级时的一个选项。没有它,它只是“Popover”
-
当时是
svc.popoverPresentationController非零吗?否则,它会默默地不设置委托。
标签: ios uistoryboard uipopovercontroller uistoryboardsegue