我已经在我的self.view中添加了TapGestureRecognizer:
tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
[self.view addGestureRecognizer:tap];
[tap release];
视图包含带有图像和标签的单个UIScrollView。我想检测用户是否点击了标签。
- (void)singleTap:(UIGestureRecognizer*)gestureRecognizer {
CGPoint pt = [gestureRecognizer locationInView:self.view];
UIView *v = [self.view hitTest:pt withEvent:nil];
if ([v isKindOfClass:[UILabel class]]) {
NSLog(@"label!");
return;
}
// else do other stuff if its not a label
但我没看到标签!在我的日志中。
答案 0 :(得分:5)
我认为这是因为userInteractionEnabled
在NO
上默认为UILabel
。试着打开它。
编辑:这真是一个猜测,但只是为了确认,Apple文档在[UIView hitTest:withEvent:]
州:
此方法忽略隐藏的视图对象,禁用用户交互或alpha级别小于0.01的视图对象。
答案 1 :(得分:0)
您的子视图(例如标签本身)实际上会隐藏用户与基础视图的交互。
为什么不在您的标签上添加手势识别器。 或者,您可能希望使用UIButton作为标签。
或 -
如果您不想确定触摸了哪个标签,您可能希望在所有标签的顶部添加一个不可见的视图(一个空视图,既不是隐藏的视图也不是alpha = 0的视图)并添加手势识别器对那些。