UITapGestureRecognizer没有捕获水龙头......应该去哪里的“捕获”代码?

时间:2013-04-19 01:41:14

标签: ios objective-c uitapgesturerecognizer

我有一个iPad应用程序(XCode 4.6,Storyboards,iOS 6.2)。我有一个这样的场景:

  1. UIView(subViewData - 涵盖#2的右边象限,右下方没有覆盖#2-的时间和名称,包含约会信息(客户名称,持续时间以阴影显示)
  2. UIView(subViewGrid - 覆盖下半部分(在图像中,它包含左边距的时间和上边距的名称。)
  3. UIScrollView(涵盖下半部分视图)
  4. UIView ------- UIView(一个在窗口的上半部分,另一个在下半部分)
  5. UIViewController(名为CalendarViewController)
  6. calendar and sechedule

    这是初始化在CalendarViewController的-viewDidLoad中找到的UITapGestureRecognizer的代码:

        //  setup for tap recognizer
    UITapGestureRecognizer *fingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                        action:@selector(singleFingerTap:)];
    fingerTap.numberOfTapsRequired = 1;
    fingerTap.numberOfTouchesRequired = 1;
    [subViewData addGestureRecognizer:fingerTap];
    

    这是未执行的subViewData(#1)中的代码:

    - (void)singleFingerTap:(UITapGestureRecognizer*)gesture {
    
    CGPoint pt = [gesture locationInView:self];
    UIView *v = [self hitTest:pt withEvent:nil];
    
    if(v.tag == 100)  //  if this is for calendar, return
        return;
    
    CGRect dataRect = CGRectMake(110.0,48.0,670.0,1450);
    CGPoint dataPoint = CGPointMake(pt.x, pt.y);
    
    //  check to see if point is within the rectangle
    if(!CGRectContainsPoint(dataRect, dataPoint))  {
        NSLog(@"\n\nNOT within subViewData");
        return;
    }
    else  {
        NSLog(@"\n\nIS within subViewData");
    }
    

    }

    问题是为什么它没有捕获水龙头?识别器代码是应该在控制器中还是应该在获取分接头的视图中?我已经阅读了几乎所有关于这个主题的内容,但在这个特定场景中找不到任何内容。非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

你说:

  

这是初始化在CalendarViewController的-viewDidLoad中找到的UITapGestureRecognizer的代码

该代码说:

 [[UITapGestureRecognizer alloc] initWithTarget:self
                                action:@selector(singleFingerTap:)];

然后你必须将singleFingerTap:放在CalendarViewController中,因为你告诉手势识别器目标是self,而self是CalendarViewController的一个实例。

你也说:

  

这是未执行的subViewData(#1)中的代码

但我不知道“在subViewData中”是什么意思;你在接口的解释中没有提到任何叫做“subViewData”的东西。不管怎么说都没关系。您已指定self,因此代码必须位于self

但是,听起来好像有问题的视图根本就没有接触过。也许它没有暴露(即它被另一个视图覆盖)。也许它的userInteractionEnabled是NO。可能有很多原因。