我想弄清楚如何完成正确的方式。我试图描绘的情况: UIGestureRecognizer块子视图处理触摸事件
我加入一个UITableView
作为UIView
的子视图。 UIView
响应tap和pinchGestureRecognizer
,但是当这样做时,tableview停止对这两个手势作出反应(它仍然对滑动作出反应)。
我已经使它与下面的代码一起工作,但它显然不是一个很好的解决方案,我相信有更好的方法。这是摆在UIView
(SuperView把):
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if([super hitTest:point withEvent:event] == self) {
for (id gesture in self.gestureRecognizers) {
[gesture setEnabled:YES];
}
return self;
}
for (id gesture in self.gestureRecognizers) {
[gesture setEnabled:NO];
}
return [self.subviews lastObject];
}
我喜欢这个解决方案最大,因为它不涉及弄乱触摸,'hitTest:withEvent:'或'pointInside:withEvent:'。 – DarkDust 2011-07-25 10:26:20
干净的解决方案,您可以使用例如'return!(touch.view == givenView);'如果你只是想排除一个给定的视图或'返回!(touch.view.tag == kTagNumReservedForExcludingViews);'当你想停止你的识别器处理触摸整个一堆不同的子视图。 – cate 2012-12-29 22:40:48
我会用' - (BOOL)isDescendantOfView:(UIView *)view'做命中测试。这在' - (void)touchesBegan:(NSSet *)与UIEvent:(UIEvent *)事件'在UISestureRecognizer的子类中触及时也可以正常工作。 – Christoph 2013-03-13 22:27:13