Ios 检测当前视图之外的任何点击
是否有方法检测当前视图之外的任何点击?我尝试使用hitTest方法实现某些内容,但未成功,但我不确定是否能很好地理解它。您可以使用UIgestureRecognitzerDelegate协议Ios 检测当前视图之外的任何点击,ios,swift,uigesturerecognizer,Ios,Swift,Uigesturerecognizer,是否有方法检测当前视图之外的任何点击?我尝试使用hitTest方法实现某些内容,但未成功,但我不确定是否能很好地理解它。您可以使用UIgestureRecognitzerDelegate协议 extension YourViewController: UIGestureRecognizerDelegate { func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
extension YourViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldReceive touch: UITouch) -> Bool {
return (touch.view === self.view)
}
}
只有当触摸在背景视图上时,才会返回“true”,但如果触摸在您的视图中,则返回“false”
注意:标识运算符===用于比较touch.view和self.view。您想知道这两个变量是否引用同一个对象
在viewDidLoad()中,您将创建手势识别器并设置委托
let gestureRecognizer = UITapGestureRecognizer(target: self,action: #selector(yourActionMethod))
gestureRecognizer.cancelsTouchesInView = false
gestureRecognizer.delegate = self
view.addGestureRecognizer(gestureRecognizer)
您需要做的是,在触摸开始中,您必须从触摸集合中获取第一个触摸对象,并且必须在视图中检查该触摸的位置(您希望在其中检测触摸) 在视图中获得触摸屏的位置后,您必须检查当前视图(您必须检查的视图是在内部还是在外部) 如果currentView的框架包含触摸位置,则表示触摸发生在视图内部或外部
override func touchsbegind(touch:Set,带有事件:UIEvent?){
super.touchesbeated(touches,with:event)
让我们先接触
guard let location=touch?.location(在:self.view中)else{return}
if!currentView.frame.contains(位置){
打印(“在视图外点击”)
}否则{
打印(“在视图内点击”)
}
}
希望有帮助 您是否尝试过触摸开始:方法您可能希望在包含当前视图的视图上添加一个点击手势。我正在这样做:这是我需要的,非常短,非常适合我!谢谢。你不也要打
super
吗?@DanielSpringer,试了什么?@IulianOnofrei上面的代码,有和没有super
是的,但是,不管快速测试如何,它都可以正常工作。我在想,在某些情况下,如果不调用super
,可能会导致问题,因为其中也说明:在创建自己的子类时,调用super来转发您自己无法处理的任何事件。