2011-08-30 50 views
4

的检测子视图我已经添加了TapGestureRecognizer到我self.view:的UIScrollView和敲击手势

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 

但是我没看到标签!在我的日志中。

回答

5

我认为这是因为userInteractionEnabled默认NOUILabel s。试着打开它。

编辑:这是一个真正的猜测,但只是为了确认,在[UIView hitTest:withEvent:]状态苹果文档:

这种方法忽略了隐藏视图对象,有残疾的用户交互,或者有一个alpha水平低于0.01。

+0

谢谢!我还修改了上面的代码,使用UIScrollView作为hitTest和locationInView – Mark

0

您的子视图(如标签本身)实际上隐藏了用户与底层视图的交互。

为什么不将手势识别器添加到您的标签。 或者,您可能想要为标签使用UIButton。

或者 -

,如果你不想来确定哪些标签已被感动了,你可能要在顶部添加一个不可见的视图(空视图,既不是隐藏的一个也没有一个与Alpha = 0)所有标签并将手势识别器添加到这些标签。