快速检测 Viewcontroller 上的第一次触摸

Posted

技术标签:

【中文标题】快速检测 Viewcontroller 上的第一次触摸【英文标题】:Detect First Touch on Viewcontroller in swift 【发布时间】:2019-04-09 00:31:45 【问题描述】:

我有 UIViewController,它有很多子视图。每个子视图可以是 Uibutton、其他视图控制器、UIView。如何检测用户何时在任何地方首次点击屏幕。我使用了 TouchesBegan 事件,但它不适用于子视图。非常感谢!

【问题讨论】:

您的问题似乎不太清楚,您能提供代码和视图层次结构吗? @AnirudhaMahale 是什么让你感到困惑?我觉得不难理解。 @Anna 为您的第一次触摸管理布尔值,添加触摸开始、手势识别器、按钮操作,然后根据调用的第一个方法管理布尔值 【参考方案1】:

在 UIVIewController 的视图中添加手势识别

// Add this in the ViewDidLoad method
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.didTapView(sender:)))
self.view.addGestureRecognizer(tapGesture)

@objc
func didTapView(sender: UITapGestureRecognizer) 
  print("View Tapped")


您必须继承您将使用的 UI 元素的类并覆盖以下方法以将触摸事件传递到视图层次结构中的下方视图。像这样

class CustomView: UIView 
    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool 
        print("Passing all touches to the next view (if any), in the view stack.")
        return false
    

现在在你的故事板中使用这个类,然后它将触摸事件传递给 ViewController 的视图,因此它将调用didTapView 方法。由于您只想要第一次触摸事件,您可以保留一个标志来检查它是否是第一次触摸。请注意,如果不需要,请不要使用 UIButton。

【讨论】:

【参考方案2】:

您好,您是否确定为该类创建了引用出口?

您可以在这个问题中查看 ventuz 的答案: UIView touch event in controller

【讨论】:

我想检测屏幕上的第一次触摸而不是特定元素。 @rog 这和ventuz有什么关系?【参考方案3】:

假设您的 MainViewController 有三个子视图:UIButtonUIView 和 SubViewController。 当这些子视图被点击/点击时,可以通过以下方式进行检测。

UIButton:添加 touchBegan 事件并在 MainViewController 中有 IBAction 并在 MainViewController 中捕获它。

UIView:添加TapGesture如下代码所示,在MainViewController中捕捉触摸事件。

SubViewController:添加类似于 UIView 的 TapGesture 并在 SubViewController 中捕获触摸事件。使用Delegate pattern 并通知 MainViewController 有关 SubViewController 触摸事件。

通过这种方式,您可以在MainViewController中检测到子视图的所有触摸事件。希望能帮助到你。如果没有,请告诉我。

点击手势代码

viewDidLoad 方法中将点按手势添加到您的视图中。

var gestureTap = UITapGestureRecognizer(target: self, action: #selector(self.handleGestureTap(sender:)))
view.addGestureRecognizer(gestureTap)

处理方法:

@objc
func handleGestureTap(sender: UITapGestureRecognizer? = nil) 
  print("View Tapped")

【讨论】:

谢谢阿南德,但不是我要找的。​​span> @Anna,我已经编辑了我的答案。请检查它是否有帮助。 但是如果你这样做,你不能在子视图中触摸,我想点击屏幕上的任何地方它会跳转到一个方法。

以上是关于快速检测 Viewcontroller 上的第一次触摸的主要内容,如果未能解决你的问题,请参考以下文章

快速检测两个 UIView 的碰撞

iPhone 抖动问题:加载 viewController 时未调用 viewDidAppear

快速从另一个 ViewController 调用函数

如何检测 UITableView 上的“快速触摸”以切换到/从全屏?

在 Monotouch 中的 UIPageViewController 中检测控件上的触摸事件

检测触摸何时开始在屏幕上的任何位置,即使是在 UIButton 上