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背景颜色不同

antd中,popover 不同情境下设置不同背景图,无法设置className的情况

关闭 popOver

iOS Popover 或 ActionSheet 导致 UISegmentedControl 按钮变灰