Ash*_*lls 16 uipopovercontroller ios uistoryboard uistoryboardsegue
我有一个视图控制器,使用故事板segue在弹出框中显示.
在呈现视图控制器中,我有以下代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let svc = segue.destinationViewController as? SettingsViewController {
svc.popoverPresentationController?.delegate = self
}
}
Run Code Online (Sandbox Code Playgroud)
然而,事实证明,所呈现的视图控制器,即使它显示为酥料饼,具有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
}
}
Run Code Online (Sandbox Code Playgroud)
该svc.popoverPresentationController代表现在设置好了,但如果酥料饼是由用户解雇攻外,没有任何的UIPopoverPresentationControllerDelegate委托方法(如popoverPresentationControllerShouldDismissPopover被调用.我在想什么?
在这种情况下无需授权.如果presentingViewController(vc包含popover的任何内容)只是覆盖:
斯威夫特4
override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
print("Dismiss: \(String(describing: self.presentedViewController))")
super.dismiss(animated: flag, completion: completion)
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特3
override func dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?) {
// Before calling super get a handle on which controller is being dismissed
print("Dismiss: \(self.presentedViewController)")
super.dismissViewControllerAnimated(flag, completion: completion)
}
Run Code Online (Sandbox Code Playgroud)
无论如何解雇,您都会收到通知.您也不需要在prepareForSegue:(至少处理此交互)中设置任何其他变量/设置.
| 归档时间: |
|
| 查看次数: |
1183 次 |
| 最近记录: |