斯威夫特3 Popover昏暗的背景

时间:2017-07-19 03:47:45

标签: swift uiview

我已阅读多个地方,并提供有关如何完成此操作的建议。我选择在后台添加UI视图并将其设置为禁用,然后在显示弹出窗口后,将视图设置为启用。

正如您所看到的,它看起来效果很好:

enter image description here

但我确实有两个问题。第一个是弹出窗口,你可以点击背景上的任何地方来解除弹出窗口。有没有可以阻止这种情况发生?我假设我的背景UIView会阻止任何输入。

此外,在弹出窗口被解除后,屏幕仍然暗淡。我尝试了以下但是在解除弹出窗口后它们都没有加载,因此View永远不会被设置为禁用:

override func viewDidAppear(_ animated: Bool) {
         dimView.isHidden = true
    }

override func viewWillAppear(_ animated: Bool) {
         dimView.isHidden = true
    }

修改

这是我用来呈现popover的代码:

  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)

2 个答案:

答案 0 :(得分:0)

我意识到,dimView不在PopoverVC中,将其添加到PopoverVC中并在点击它时处理dismiss。在弹出窗口被解除后,viewDidAppear和viewWillAppear将不会被调用。所以你的屏幕仍然模糊。如果你将dimView添加到Popover,希望你能解决这些问题

答案 1 :(得分:0)

我认为您可以使用UIPopoverPresentationControllerDelegate和协议/委托解决您的两个问题,以便在您解除并隐藏dimView时告诉呈现的viewcontroller。

第一个问题可以这样实现:

extension YourViewController: UIPopoverPresentationControllerDelegate {

    func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool {
        return false
}

对于第二个问题,您可以通过委派传递函数。希望这个链接有助于此。

https://matteomanferdini.com/how-ios-view-controllers-communicate-with-each-other/

干杯