我有一个子类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
当我点击视图时没有调用该方法!
奇怪的是,如果我将该TileView
类复制到一个空白的 xCode 项目中并在那里进行设置,那么一切正常。这是奇特的,因为手势首先由子视图处理,然后由父视图处理——因此 tile 类不应受到其父视图的影响。手势也完全包含在TileView
类中。
Controller -> controller's view -> scroll view -> container view -> tile view
作为参考,平铺视图在 a:模式中嵌套得相当深
。
我试过没有成功:
- 在 TileView 及其所有子视图上设置 userInteractionEnabled = YES。
- 从代码的其他部分删除所有手势识别器以避免干扰。
- 始终设置
tap.delegate = self
然后实施gestureRecognizer:shouldRecognizeSimultaneously...
return YES;
没运气 :/
关于还有什么可能出错的任何想法?或者我可以运行哪些测试来更详细地了解问题?
编辑:更多细节
回想一下,平铺视图嵌套在:Controller -> controller's view -> scroll view -> container view -> tile view
如果我在控制器文件中添加手势识别器:
[self.view addGestureRecognizer:tap]
然后[self.view hitTest:[sender locationInView:self.view] withEvent:nil];
在事件处理程序中使用,我可以看到返回的视图是 aUIScrollView
而不是TileView
预期的 a 。
此外,添加手势识别器可以正常工作,但如果我将其添加到(这是 的唯一子视图)self.scrollView
将停止工作。有。self.containerView
scrollView
containerView
userInteractionEnabled = YES