addTarget:action:forControlEvents:在与单独的UITapGestureRecognizer进行交互时被忽略

时间:2014-06-07 15:04:54

标签: ios objective-c

我对iOS编程有点新鲜

我有一些代码(删节),如下所示

UIView *someSubView = [[UIView alloc] initWithFrame:...];
[self addSubView:someSubView];
[someSubView addTarget:self action:@selector(_handleTapOnView:) forControlEvents:UIControlEventTouchUpInside];

_tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_handleTap:)];
_tapGestureRecognizer.delegate = self;
[self.view addGestureRecognizer:_tapGestureRecognizer];

不幸的是,手势识别器触发并且我的视图addTarget调用没有。我已经尝试过评论手势识别器代码并且它有效,所以我知道它不是在子视图上调用addTarget。

我最初通过使用gestureRecognizer解决了这个问题:shouldReceiveTouch:并对子视图进行了点击测试,但我觉得我在这里缺少一些基本的理解,不会要求我添加手动命中测试

重要的是要注意,当我点击我的子视图时,我不希望_tapGestureRecognizer中_handleTap中的代码执行。

这里有什么指导吗?谢谢!

1 个答案:

答案 0 :(得分:0)

尝试使用:

_tapGestureRecognizer.cancelsTouchesInView = NO;
否则,手势识别器将拦截触摸并且不会进一步转发它们(换句话说,手势识别器获得触摸,处理它,并且因为它取消它,所以没有其他物体获得触摸)。通过不取消,触摸被转发给任何其他对象(识别者或视图)来处理它。