-1

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

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

日历和时间表

这是初始化在 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");
}

}

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

4

1 回答 1

2

你说:

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

那个代码说:

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

然后你必须放入singleFingerTap:CalendarViewController,因为你已经告诉手势识别器目标是self,并且self是 CalendarViewController 的一个实例。

你还说:

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

但我不知道“in subViewData”是什么意思;您在对界面的解释中没有提到任何称为“subViewData”的内容。反正也没关系。您已指定self,因此代码需要位于self.

然而,在我看来,所讨论的观点似乎根本没有受到影响。也许它没有暴露(即它被另一个视图覆盖)。也许它userInteractionEnabled是NO。可能有很多原因。

于 2013-04-19T01:48:52.030 回答