UIScrollView和检测轻击手势的子视图

时间:2011-08-30 01:21:40

标签: iphone uiscrollview uigesturerecognizer

我已经在我的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

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

2 个答案:

答案 0 :(得分:5)

我认为这是因为userInteractionEnabledNO上默认为UILabel。试着打开它。

编辑:这真是一个猜测,但只是为了确认,Apple文档在[UIView hitTest:withEvent:]州:

  

此方法忽略隐藏的视图对象,禁用用户交互或alpha级别小于0.01的视图对象。

答案 1 :(得分:0)

您的子视图(例如标签本身)实际上会隐藏用户与基础视图的交互。

为什么不在您的标签上添加手势识别器。 或者,您可能希望使用UIButton作为标签。

或 -

如果您不想确定触摸了哪个标签,您可能希望在所有标签的顶部添加一个不可见的视图(一个空视图,既不是隐藏的视图也不是alpha = 0的视图)并添加手势识别器对那些。