Swift 3 Popover 昏暗背景
Posted
技术标签:
【中文标题】Swift 3 Popover 昏暗背景【英文标题】:Swift 3 Popover Dim Background 【发布时间】:2017-07-19 03:47:45 【问题描述】:我已经阅读了多个关于如何完成此操作的建议。我在后台添加了一个 UI 视图并将其设置为禁用,然后在显示弹出框后,将视图设置为启用。
如您所见,它看起来运行良好:
但我确实有两个问题。第一个是出现弹出框后,您可以点击背景上的任意位置以关闭弹出框。有什么地方可以阻止这种情况发生吗?我假设我的后台 UIView 会阻止任何输入。
此外,弹出框关闭后,屏幕仍然很暗。我尝试了以下操作,但在关闭弹出框后它们都没有加载,因此视图永远不会被设置为禁用:
override func viewDidAppear(_ animated: Bool)
dimView.isHidden = true
override func viewWillAppear(_ animated: Bool)
dimView.isHidden = true
编辑:
这是我用来呈现弹出框的代码:
let popover = storyboard?.instantiateViewController(withIdentifier: "PopoverVC")
popover?.modalPresentationStyle = .popover
popover?.popoverPresentationController?.delegate = self as? UIPopoverPresentationControllerDelegate
popover?.popoverPresentationController?.sourceView = self.view
popover?.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)
popover?.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
dimView.isHidden = false
self.present(popover!, animated: false)
【问题讨论】:
在关闭视图控制器视图中使用的 dimView.isHidden = true 似乎没有调用 如何将其添加到 popoverVC?目前它是主视图控制器中的一个出口 【参考方案1】:我意识到,dimView 不在 PopoverVC 中,将其添加到 PopoverVC 并在点击它时处理关闭。弹出框关闭后 viewDidAppear 和 viewWillAppear 将不会被调用。所以你的屏幕仍然是模糊的。如果你在Popover中添加dimView,希望你能解决这些问题
【讨论】:
如何将其添加到 popoverVC?目前它是主视图控制器中的一个出口。【参考方案2】:我认为您可以使用 UIPopoverPresentationControllerDelegate 和协议/委托来解决您的两个问题,以便在您关闭并隐藏您的 dimView 时告诉呈现视图控制器。
第一个问题可以这样实现:
extension YourViewController: UIPopoverPresentationControllerDelegate
func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool
return false
对于第二个问题,您可以通过委托传递函数。希望此链接对此有所帮助。
https://matteomanferdini.com/how-ios-view-controllers-communicate-with-each-other/
干杯
【讨论】:
以上是关于Swift 3 Popover 昏暗背景的主要内容,如果未能解决你的问题,请参考以下文章
来自 UITableView 的 Swift Presenting popover 运行速度非常慢
删除Popover View Controller -swift
Popover箭头与viewcontroller背景颜色不同