gpt4 book ai didi

iphone - UIGestureRecognizer 未触发的可能原因?

转载 作者:行者123 更新时间:2023-12-01 17:26:10 25 4
gpt4 key购买 nike

我有一个子类 UIView ,我们称之为TileView.m/h .

TileView.m ,我有以下代码:( [setup] 肯定被调用,我用断点检查过)。

- (void)setup {
self.userInteractionEnabled = YES;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(testPressed:)];
[self addGestureRecognizer:tap];
}

- (void)testPressed:(UITapGestureRecognizer *)sender {
NSLog(@"tap pressed");
}

出于某种原因, testPressed点击 View 时不会调用方法!

奇怪的是,如果我复制 TileView进入一个空白的 xCode 项目并将其设置在那里,一切正常。这是奇特的,因为手势首先由 subview 处理,然后由父 View 处理——因此 tile 类不应受到其父 View 的影响。手势也完全包含在 TileView 中。类(class)。

作为引用,平铺 View 嵌套相当深: Controller -> controller's view -> scroll view -> container view -> tile view图案。

我试过没有成功:
  • 在 TileView 及其所有 subview 上设置 userInteractionEnabled = YES。
  • 从代码的其他部分删除所有手势识别器以避免干扰。
  • 设置tap.delegate = self然后执行 gestureRecognizer:shouldRecognizeSimultaneously...永远 return YES;

  • 没运气 :/

    关于还有什么可能出错的任何想法?或者我可以运行哪些测试来更详细地了解问题?

    编辑:更多细节

    回想一下,平铺 View 嵌套在: Controller -> controller's view -> scroll view -> container view -> tile view
    如果我在 Controller 文件中添加手势识别器:
    [self.view addGestureRecognizer:tap]

    然后使用 [self.view hitTest:[sender locationInView:self.view] withEvent:nil];在事件处理程序中,我可以看到返回的 View 是 UIScrollView而不是 TileView正如预期的那样。

    此外,将手势识别器添加到 self.scrollView相反工作正常,但如果我将其添加到 self.containerView 将停止工作(这是 scrollView 的唯一 subview )。 containerViewuserInteractionEnabled = YES .

    最佳答案

    如果 View 包含 UIImageView 的 subview s,请记住,您必须明确设置 userInteractionEnabledYES (默认为 NO )。

    如果没有, ImageView 将阻止点击到达 super View 。

    另外,请记住设置触摸次数。

    关于iphone - UIGestureRecognizer 未触发的可能原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18036870/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com