当使用UIGestureRecognizers时,我如何知道事件发生在哪个子视图上?
根据文档:
手势识别器对特定视图和该视图的所有子视图的触摸进行命中测试。
据我所知,“view”属性是
手势识别器附加到的视图。
这将是父视图。
发布于 2010-05-07 22:07:46
这将在事件的位置找到最内层的子视图。(请注意,如果该子视图有任何交互式的内部私有子视图,则此代码也会找到这些子视图。)
UIView* view = gestureRecognizer.view;
CGPoint loc = [gestureRecognizer locationInView:view];
UIView* subview = [view hitTest:loc withEvent:nil];在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?`发布于 2016-02-17 17:12:19
对于未来的用户...当世界不再使用obj-c时,我现在有了一个更好的选择…
[sender view]
这样使用它:
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;
}https://stackoverflow.com/questions/2788870
复制相似问题