繁体   English   中英

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

[英]UIScrollView and detecting subview of tap gesture

我在自己的视图中添加了一个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

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

我认为这是因为UILabel默认情况下userInteractionEnabledNO 试着打开它。

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

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

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

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

要么 -

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM