UIGestureRecognizer未触发的可能原因?

Awa*_*ain 1 iphone uiscrollview uigesturerecognizer ios

我有一个子类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");
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,testPressed当我点击视图时,不会调用该方法!

奇怪的是,如果我将TileView类复制到一个空白的xCode项目并在那里设置它,一切都很好.这是特殊的,因为手势首先由子视图处理,然后由超级视图处理 - 因此tile类不应受其超级视图的影响.此外,手势完全包含在TileView课程中.

作为参考,tile视图嵌套在: Controller -> controller's view -> scroll view -> container view -> tile viewpattern中.

我试过没有成功:

  • 在TileView及其所有子视图上设置userInteractionEnabled = YES.
  • 从代码的其他部分删除所有手势识别器以避免干扰.
  • 设置tap.delegate = self然后gestureRecognizer:shouldRecognizeSimultaneously...始终实施return YES;

没运气 :/

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

编辑:更多细节

回想一下,tile视图嵌套在: Controller -> controller's view -> scroll view -> container view -> tile view

如果我在控制器文件中添加手势识别器:

[self.view addGestureRecognizer:tap]
Run Code Online (Sandbox Code Playgroud)

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

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

Mun*_*ndi 8

如果视图包含UIImageViews的子视图,请记住必须显式设置userInteractionEnabledYES(默认值为NO).

如果没有,图像视图将阻止点击到达超级视图.

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