Objective c 查找在使用UITapGestureRecognizer时点击的子视图

Objective c 查找在使用UITapGestureRecognizer时点击的子视图,objective-c,ipad,Objective C,Ipad,我如何知道在使用UIgestureRecognitors时在哪个子视图上发生了事件 根据文件: 手势识别器在屏幕上运行 按特定视图进行测试 以及该视图的所有子视图 就我所见,“视图”属性是 手势识别器显示的视图 附属于 这将是父视图。这将在事件位置找到最内部的子视图。(请注意,如果该子视图具有任何交互式内部私有子视图,则此代码也会找到这些子视图。) 在Swift 2中: let view = gestureRecognizer.view let loc = gestureRecognizer.l

我如何知道在使用UIgestureRecognitors时在哪个子视图上发生了事件

根据文件:

手势识别器在屏幕上运行 按特定视图进行测试 以及该视图的所有子视图

就我所见,“视图”属性是

手势识别器显示的视图 附属于


这将是父视图。

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

在Swift 2中:

let view = gestureRecognizer.view
let loc = gestureRecognizer.locationInView(view)
let subview = view?.hitTest(loc, withEvent: nil) // note: it is a `UIView?`
在Swift 3中:

let view = gestureRecognizer.view
let loc = gestureRecognizer.location(in: view)
let subview = view?.hitTest(loc, with: nil) // note: it is a `UIView?`
对于未来的用户。。。 当世界不再使用obj-c时,我有了一个更好的选择

[发件人视图]

这样使用它:

UITapGestureRecognizer * objTapGesture = [self createTapGestureOnView:myTextField];

[objTapGesture addTarget:self action:@selector(displayPickerView:)];
//添加这些方法

-(void)displayPickerView:(UITapGestureRecognizer*)sender
{
    UITextField *textField = (UITextField*)[sender view];
    NSLog(@"tag=  %ld", (long)textField.tag);
}

-(UITapGestureRecognizer*)createTapGestureOnView:(UIView *)view
{
    view.userInteractionEnabled = YES;
    UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc]init];
    tapGesture.numberOfTapsRequired = 1;
    tapGesture.numberOfTouchesRequired = 1;
    [view addGestureRecognizer:tapGesture];
    return tapGesture;
}

杰出的非常感谢-这真的帮助了我!令人惊叹的!这将有助于解决更多的问题:)只想补充一点,
hitTest:withEvent:
将尽可能深入儿童树。如果有任何子视图或子视图的子视图要忽略,您可以在这些视图上设置
userInteractionEnabled=NO
。如果我们只想下一级呢?@JohnD。迭代查找
.superview
直到到达原始
视图
-[UIgestureRecognitizer视图]返回它附加到的视图(根据规范);OP对该视图的子视图感兴趣。
-(void)displayPickerView:(UITapGestureRecognizer*)sender
{
    UITextField *textField = (UITextField*)[sender view];
    NSLog(@"tag=  %ld", (long)textField.tag);
}

-(UITapGestureRecognizer*)createTapGestureOnView:(UIView *)view
{
    view.userInteractionEnabled = YES;
    UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc]init];
    tapGesture.numberOfTapsRequired = 1;
    tapGesture.numberOfTouchesRequired = 1;
    [view addGestureRecognizer:tapGesture];
    return tapGesture;
}