我的UIImageView子类没有收到任何触摸事件的原因是什么?

时间:2009-05-24 20:06:11

标签: iphone cocoa-touch uikit

我确保我的自定义UIImageView和UIImageView本身的所有超视图都有userInteractionEnabled = YES;

同样在笔尖中,所有视图和子视图都有userInteractionEnabled = YES;

但出于某种原因,当我点击UIImageView时,这些从未被调用过:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"check!");
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"other check");
}

我有一个UIView,可以作为某些子视图的分组。这可能是个问题吗?

4 个答案:

答案 0 :(得分:2)

这只是一个猜测 - 在视图层次结构中的某个地方是否有UIScrollView? UIScrollViews不传递普通视图等触摸事件,您必须将其子类化并实现自定义touchesBegan方法。你可以找到有关here的信息 - 这是一个问题,让我第一次遇到它时刮了我的头,谷歌搜索几个小时。

答案 1 :(得分:2)

过了一会儿,我发现了以下问题:

我有一个UIView,我曾经将一些UIImageViews组合在一起,所以我可以通过仅移动UIView来同时移动所有这些。我做了UIView 0.01 x 0.01大而它没有clipToBounds。当我点击超出他们的超级视图边界的子视图时,UIView,没有在这些子视图上收到的触摸事件。我不知道是否有任何触摸事件。

因此,如果您遇到同样的问题,请确保您的触摸发生在适合超视图的区域。在我的情况下,我只是将UIView分组更大,使触摸敏感区域更大。在那之后,它奏效了。我现在稍微记得Apple已经在某个地方的文档中提到过,子视图可能会在他们的超级视图之外绘制,但触摸事件只有在超级视图的矩形中才会被识别。

答案 2 :(得分:1)

看起来你有一个拼写错误:正确的选择器名称是'touchesBegan'。您是以编程方式还是通过笔尖添加此视图?

答案 3 :(得分:1)

touchesBegun应为touchesBegan,但我认为这只是一个错字?

部署,通常触及不通过表示压力CPU 。尝试使用Instruments测试应用程序的性能。