我有一个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,表示为弹出,然后锚定到图像。
答案 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”
希望能帮助你。