尝试关闭弹出视图控制器 Swift 时没有任何反应
Posted
技术标签:
【中文标题】尝试关闭弹出视图控制器 Swift 时没有任何反应【英文标题】:nothing happens on trying to dismiss popover viewcontroller Swift 【发布时间】:2017-02-25 19:00:02 【问题描述】:我有一个视图控制器,当用户单击 ImageView 时,它显示为弹出框。 问题是,我添加了一个按钮来关闭它,但是当我点击它时没有任何反应。 我的代码是:
@IBAction func onCloseTapped(_ sender: Any)
presentedViewController?.dismiss(animated: true, completion: nil)
我也试过dismiss(animated: true, completion: nil)
等方法,还是不行。
谁能告诉我我做错了什么?
编辑: 发布截图:
编辑 2:我从情节提要中呈现它。我在图像上添加了一个手势识别器,然后从情节提要中添加了 segue,显示为 popover,然后锚定到图像。
【问题讨论】:
控制器是如何呈现的?您是否验证了onCloseTapped
方法实际上正在被调用?
当用户点击图像时,我会展示它。然后我放置了一个按钮并注意到点击它时发生的情况,代码与上面相同。
我问的不是你什么时候展示,而是你如何展示。 Edit您的问题与相关代码显示您如何显示您无法关闭的控制器。
我已经编辑了帖子。
【参考方案1】:
它不起作用,因为当您显示为弹出框时,viewController 没有导航控制器。您必须创建一个委托方法并使用 viewController 上的解除函数来调用弹出框。
这里是一个例子:
在弹出框视图控制器中制作弹出框委托:
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
现在你只需要使用代理来关闭你的弹出视图控制器:
extension ViewController: PopoverViewControllerDelegate
func dismiss()
navigationController?.dismiss(animated: true, completion: nil)
别忘了把标识符给你segue,我们使用的标识符是this = "popover"
希望对你有所帮助。
【讨论】:
以上是关于尝试关闭弹出视图控制器 Swift 时没有任何反应的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 中使文本字段功能在 tableview 中
关闭一个自定义弹出窗口UIViewController并立即显示另一个自定义弹出窗口UIViewController -SWIFT