如何检测 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 类?