代码之家  ›  专栏  ›  技术社区  ›  LK.

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

  •  66
  • LK.  · 技术社区  · 15 年前

    我如何知道在使用uigesturerecognizers时,孩子对发生的事件有哪些看法?

    根据文件:

    手势识别器对 触摸命中测试到特定视图 以及所有视图的子视图。

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

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

    这将是父视图。

    2 回复  |  直到 8 年前
        1
  •  181
  •   kennytm    8 年前

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

    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?`
    
        2
  •  -1
  •   jeet.chanchawat    9 年前

    对于未来的用户… 当世界不再使用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;
    }