尝试解除popover viewcontroller Swift时没有任何反应

时间:2017-02-25 19:00:03

标签: swift

我有一个viewcontroller,当用户点击imageView时显示为popover。 问题是,我添加了一个按钮来解除它,但是当我点击它时没有任何反应。 我的代码是:

 @IBAction func onCloseTapped(_ sender: Any) {
presentedViewController?.dismiss(animated: true, completion: nil)
}

我也尝试过:dismiss(animated: true, completion: nil)和其他方法,但仍然没有。

谁能告诉我,我做错了什么? 编辑:发布截图: enter image description here

编辑2:我从故事板中呈现它,我在图像上添加了一个手势识别器,他们在故事板中添加了segue,表示为弹出,然后锚定到图像。

1 个答案:

答案 0 :(得分:0)

它不起作用,因为当你显示为popover时,viewController没有navigationController。你必须创建一个委托方法,并使用viewController上的dismiss函数来调用popover。

这是一个例子:

在popover viewController:

中创建popover委托
protocol PopoverViewControllerDelegate: NSObjectProtocol {
    func dismiss()
}

然后你创建一个委托变量并在点击按钮时调用:

var delegate: PopoverViewControllerDelegate?

@IBAction func onCloseTapped(_ sender: Any) {
        delegate?.dismiss()
}

现在在调用popover的viewController中,重写prepare for segue方法来设置popover委托:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "popover" {
            if let vc = segue.destination as? PopoverViewController {
                vc.delegate = self
            }
        }
    }

现在你只需要使用委托来解除你的popover viewController:

extension ViewController: PopoverViewControllerDelegate {
    func dismiss() {
        navigationController?.dismiss(animated: true, completion: nil)
    }
}

不要忘记为你设置标识符segue,我们使用的标识符是this =“popover”

希望能帮助你。