Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检测当前视图之外的任何点击_Ios_Swift_Uigesturerecognizer - Fatal编程技术网

Ios 检测当前视图之外的任何点击

Ios 检测当前视图之外的任何点击,ios,swift,uigesturerecognizer,Ios,Swift,Uigesturerecognizer,是否有方法检测当前视图之外的任何点击?我尝试使用hitTest方法实现某些内容,但未成功,但我不确定是否能很好地理解它。您可以使用UIgestureRecognitzerDelegate协议 extension YourViewController: UIGestureRecognizerDelegate { func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,

是否有方法检测当前视图之外的任何点击?我尝试使用hitTest方法实现某些内容,但未成功,但我不确定是否能很好地理解它。

您可以使用UIgestureRecognitzerDelegate协议

    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来转发您自己无法处理的任何事件。