swift - 关闭自定义弹出对话框
问题描述
在其区域之外点击时,我需要关闭模式对话框。当视图在故事板中定义并呈现如下时,这会自动工作:
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
解决方案
对于未来的读者:正如马特首先评论的那样,所提供的代码是可行的。问题是模拟器无法运行,需要重新启动。结案。
推荐阅读
- c# - 如果在关闭时使用,是否保证方法的其余部分将在 WhenAll 之后执行?
- http-authentication - 如何使用 CLI 参数为 Traefik 仪表板设置密码?
- excel - 在以某种方式对其进行操作后,如何计算字符串值满足特定条件的范围内的单元格?
- arduino - Arduino MKRFOX1200 COM 端口不工作
- objective-c - 如何获取我的块的返回值
- sql-server - 通过 SQL Server 代理运行的 SSIS 包无法修改变量
- amazon-web-services - 将 SNS 主题订阅从一个设备端点复制到另一个
- php - 在邮件 PHP 中添加 QR 图像
- sql-server - how to optimize nested loop query
- c# - 命名空间 xamarin 中不存在资源