如何检测 UIViewController 外部的点击/触摸

Posted

技术标签:

【中文标题】如何检测 UIViewController 外部的点击/触摸【英文标题】:How to detect tap/touch outside a UIViewController 【发布时间】:2021-06-29 11:46:33 【问题描述】:

如下图所示,我在顶部有一个黑色调光器视图,底部有一个视图控制器(白色),屏幕大小为一半。

我想要做的是当我点击调光的地方时。在视图控制器之外。这个 viewController 应该被关闭。

是的,我使用touchesBegan 找到了大量主题。但在我的情况下它不起作用,问题是touchesBegan 无法检测到当前呈现的 viewController 之外的触摸。当我点击那个较暗的视图时,它永远不会被触发。

如果我在调光视图上使用手势检查,我也无法从调光视图中关闭这个 viewController。

如果有人和我遇到类似情况,欢迎提出任何建议。

【问题讨论】:

【参考方案1】:

您应该能够将UITapGesture 添加到视图窗口,请看这里:Dismiss modal view form sheet controller on outside tap

【讨论】:

是的,我可以将 UITapGesture 添加到我的调光器视图中。我检查了这篇文章,我不清楚如何将此视图连接到我的 modalViewController,因为我需要关闭它。 在您的 modalViewController 上,您可以使用 view.window?.add... 添加手势,然后当点击被识别时,您可以调用 self.dismiss(animated: true, completion: nil) 谢谢。我在 modalViewController 中添加手势 view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleDismiss)))。效果和实现touchBegan一样,只能检测到这个viewController里面的触摸,而我需要检测外面的触摸。 使用 view.window?而不是仅仅查看 - 抱歉回复晚了 NP,我也尝试view.window?,但这一次它可以触发tapGesture,但是会检测到viewController内部或外部的所有空间。因为指定窗口的时候就是整个屏幕,如果是在你这边工作呢?

以上是关于如何检测 UIViewController 外部的点击/触摸的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 iOS UIViewController 是不是被交互或触摸

如何检测 UIViewController 内的 UITableView 类?

iOS Dev - 如何检测用户通过按“返回”访问此 UIViewController

检测打开 uiviewcontroller 的父母

如何将通用链接连接到 UIViewController?

如何在 iOS 中检测外部麦克风?