UIScrollView的iOS5 UITapRecognizer干扰button。 怎么修?
我有UIScrollView
UIView
内的一堆UIButton
。 我正在试图添加一个水龙头识别器的滚动视图。 轻拍识别器触发,但现在我的button没有任何工作。
我知道,在iOS5中, UIScrollView
可以以某种方式将触摸事件传递给控制层次。 任何人都可以帮我弄清楚如何做到这一点?
将UIGestureRecognizer
属性cancelsTouchesInView
设置为NO。
UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)]; singleTapGestureRecognizer.numberOfTapsRequired = 1; singleTapGestureRecognizer.enabled = YES; singleTapGestureRecognizer.cancelsTouchesInView = NO; [tapableView addGestureRecognizer:singleTapGestureRecognizer]; [singleTapGestureRecognizer release];
来自UIGestureRecognizer类参考
一个布尔值,影响识别手势时是否将触摸传递给视图。
当此属性为YES(默认值)并且接收方识别其手势时,该待处理手势的触摸将不会传送到视图,而先前传送的触摸将通过touchesCancelled:withEvent:消息发送到视图来取消。 如果手势识别器不识别其手势,或者如果此属性的值为NO,则视图接收多点触摸序列中的所有触摸。
对于我来说,上述答案的组合工作
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userDidTap:)]; tapRecognizer.cancelsTouchesInView = YES; tapRecognizer.delegate = self; [tapRecognizer requireGestureRecognizersToFail:self.scrollView.gestureRecognizers]; [self.view addGestureRecognizer:tapRecognizer];
–
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view.superview isKindOfClass:[UIButton class]] || [touch.view isKindOfClass:[UIButton class]]) { return NO; } return YES; }
您也可以使用此处logging的UIGestureRecognizerDelegate
的gestureRecognizer:shouldReceiveTouch:
方法完成相同的操作。 它提供了更多的灵活性,例如,如果你想取消某些触摸,而不是其他的。 这是一个例子,
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view.superview isKindOfClass:[UIButton class]]) return NO; return YES; }