我有一个iPad应用程序(XCode 4.6,Storyboards,iOS 6.2)。我有一个这样的场景:
这是初始化在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");
}
}
问题是为什么它没有捕获水龙头?识别器代码是应该在控制器中还是应该在获取分接头的视图中?我已经阅读了几乎所有关于这个主题的内容,但在这个特定场景中找不到任何内容。非常感谢帮助。
答案 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。可能有很多原因。