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