【问题标题】:UITapGestureRecognizer for detecting which UIView was tapped on my screenUITapGestureRecognizer 用于检测在我的屏幕上点击了哪个 UIView
【发布时间】:2016-07-07 21:04:04
【问题描述】:

我正在使用UITapGestureRecognizer 来检测在我的屏幕上点击了哪个 UIView,但由于某种原因它只检测到父视图点击,例如下面的代码仅记录父视图标签。我如何检测主视图上存在的子视图点击。请建议。

Inside View did load :- 

UITapGestureRecognizer *viewTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionForViewTapped:)];
    [self.view addGestureRecognizer:viewTapRecognizer];


-(void) actionForViewTapped:(UITapGestureRecognizer*)sender {
    NSLog(@"view tapped");
    UIView *view = sender.view;
    NSLog(@"view tag is %lu", view.tag); //Always prints parent view tag. 

    if(view.tag == 10){
        NSLog(@"tag1 tapped"); // not called
    }
    if(view.tag == 20){
        NSLog(@"tag 2 tapped"); // not called
    }
}

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    您可以使用以下代码检测子视图,我刚刚测试了创建示例项目。

    -(void) actionForViewTapped:(UITapGestureRecognizer*)sender {
        NSLog(@"view tapped");
        UIView *view = sender.view;
        CGPoint loc = [sender locationInView:view];
        UIView* subview = [view hitTest:loc withEvent:nil];
        NSLog(@"view tag is %lu", subview.tag); //will print Subview tag.
    
        if(view.tag == 10){
            NSLog(@"tag1 tapped");  
        }
        if(view.tag == 20){
            NSLog(@"tag 2 tapped");
        }
    }
    

    【讨论】:

      【解决方案2】:

      UIGestureRecognizer 用于单个视图。

      如果你想使用UIGestureRecognizer,你必须为每个视图创建一个,调用相同的方法。

      【讨论】:

        猜你喜欢
        • 2014-09-01
        • 1970-01-01
        • 2016-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-09
        • 1970-01-01
        • 2022-01-26
        相关资源
        最近更新 更多