【发布时间】:2014-01-02 16:12:30
【问题描述】:
我在使用 UITapGestureRecognizer 时遇到了一点问题。我是这样创建的:
self.userInteractionEnabled = YES;
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
tapRecognizer.cancelsTouchesInView = NO;
tapRecognizer.delaysTouchesBegan = YES;
tapRecognizer.delegate = self;
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 1;
[self addGestureRecognizer:tapRecognizer];
在头文件中,我还包含并实现shouldReceiveTouch: 方法,如下所示:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
return YES;
}
我查看了无数有类似问题的人的帖子,但似乎找不到解决方案。我听说如果您要添加手势识别器的视图具有将userInteractionEnabled 设置为 YES 的子视图,则可能会干扰点击识别,因此我还包括以下内容:
for(UIView *subview in self.subviews) {
subview.userInteractionEnabled = NO;
}
有人知道为什么手势识别器不起作用吗?
编辑:
这里有一些细节:
- 我正在将 UITapGestureRecognizer 添加到 UIView 子类中。
- 我在子类的
initWithFrame:方法中添加了手势识别器。 - 我已经通过单步执行实际添加的代码部分验证了手势识别器正在被添加。
- 包含此视图的视图控制器没有附加任何手势识别器,但实现了
touchesBegan、touchesMoved和touchesEnded。但是,根据这个question,视图控制器实现这些不应该影响视图的手势识别。
编辑2:
我已验证没有其他视图阻止手势识别器的视图接收触摸。我还验证了该视图实际上已添加到包含视图控制器的视图中。问题似乎出在其他地方。
【问题讨论】:
-
此视图的父对象之一是否附加了手势识别器?
-
@BrianShamblen - 视图所在的视图控制器没有附加任何手势识别器,但它确实实现了
touchesBegan:、touchesMoved:和touchesEnded:。 -
你可以尝试将视图的背景颜色设置为红色吗?如果可以正常看到红色视图,请为层次结构中的所有视图设置背景颜色,然后您可以判断视图是否重叠
标签: ios iphone objective-c uigesturerecognizer uitapgesturerecognizer