查找使用UITapGestureRecognizer时点击了哪个子视图

LK.*_*LK. 67 objective-c ipad

使用UIGestureRecognizers时,如何知道事件发生在哪个子视图上?

根据文件:

手势识别器根据对特定视图和所有视图的子视图进行经过测试的触摸进行操作.

据我所知,'view'属性是

手势识别器附加到的视图.

这将是父视图.

ken*_*ytm 187

这将在事件的位置找到最里面的后代视图.(请注意,如果该子视图具有任何交互式内部私有孙子,则此代码也会找到它们.)

UIView* view = gestureRecognizer.view;
CGPoint loc = [gestureRecognizer locationInView:view];
UIView* subview = [view hitTest:loc withEvent:nil];
Run Code Online (Sandbox Code Playgroud)

在Swift 2中:

let view = gestureRecognizer.view
let loc = gestureRecognizer.locationInView(view)
let subview = view?.hitTest(loc, withEvent: nil) // note: it is a `UIView?`
Run Code Online (Sandbox Code Playgroud)

在Swift 3中:

let view = gestureRecognizer.view
let loc = gestureRecognizer.location(in: view)
let subview = view?.hitTest(loc, with: nil) // note: it is a `UIView?`
Run Code Online (Sandbox Code Playgroud)

  • 只想添加一下`hitTest:withEvent:`将尽可能远离孩子们的树.如果您要忽略任何子视图或子视图的子视图,则可以在这些视图上设置"userInteractionEnabled = NO". (10认同)