首页 > 解决方案 > 关闭自定义弹出对话框

问题描述

在其区域之外点击时,我需要关闭模式对话框。当视图在故事板中定义并呈现如下时,这会自动工作:

let storyboard = UIStoryboard(name: "Services", bundle: nil)
let pinCodeController = storyboard.instantiateViewController(withIdentifier: "PinCodeController")

pinCodeController.modalPresentationStyle = .popover
pinCodeController.preferredContentSize = CGSize(width: 200, height: 300)

let presentationController = pinCodeController.popoverPresentationController
presentationController?.sourceView = pinCodeButton

self.present(pinCodeController, animated: true)

但是,由于我没有使用故事板,所以我有几乎相同的代码来展示我的观点。此代码显示视图,但在其边界之外点击时不会关闭。

popoverFromSourceController.modalPresentationStyle = .popover
popoverFromSourceController.preferredContentSize = CGSize(width: 200, height: 300)

let presentationController = popoverFromSourceController.popoverPresentationController
presentationController?.sourceView = self.popoverFromSourceViewButton

present(popoverFromSourceController, animated: true)

谁能看到有什么区别以及为什么行为不同?我是否需要以某种方式将点击事件添加到底层视图以关闭弹出窗口?

我有同样的问题,虽然从 UIBarButtonItem 呈现相同的弹出窗口时有所不同。我的导航控制器有两个条形按钮,当通过第一个按钮显示对话框时,单击第二个按钮时它将自动关闭。但是,在主视图中单击不会关闭对话框。

完整源代码:https ://github.com/igunther/CleanController

任何人?

更新

添加了此代码,但仍然无法正常工作:

popoverFromSourceController.isModalInPopover = false

标签: swift

解决方案


对于未来的读者:正如马特首先评论的那样,所提供的代码是可行的。问题是模拟器无法运行,需要重新启动。结案。


推荐阅读