0
我有一个启用分页的UIScrollview。这个滚动视图内有3个视图(页面)。在滚动视图的父视图中有一个轻击手势,在顶部显示并隐藏导航栏。如何将TouchUpInside事件传递给UIButton,而不将它传递给父视图?
问题: 在我想添加按钮的页面之一中。但问题是,每当我点击这些按钮时,显示/隐藏导航栏方法也被触发。将触摸仅传递给这些按钮而不是滚动视图的父视图的最佳方式是什么?
我有一个启用分页的UIScrollview。这个滚动视图内有3个视图(页面)。在滚动视图的父视图中有一个轻击手势,在顶部显示并隐藏导航栏。如何将TouchUpInside事件传递给UIButton,而不将它传递给父视图?
问题: 在我想添加按钮的页面之一中。但问题是,每当我点击这些按钮时,显示/隐藏导航栏方法也被触发。将触摸仅传递给这些按钮而不是滚动视图的父视图的最佳方式是什么?
NJones是在正确的轨道上,但我认为他的答案有一些问题。
我假设你想通过触摸任何按钮在你的滚动视图。在你的手势识别器的代表中,执行如下gestureRecognizer:shouldReceiveTouch:
:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)recognizer shouldReceiveTouch:(UITouch *)touch {
UIView *gestureView = recognizer.view;
// gestureView is the view that the recognizer is attached to - should be the scroll view
CGPoint point = [touch locationInView:gestureView];
UIView *touchedView = [gestureView hitTest:point withEvent:nil];
// touchedView is the deepest descendant of gestureView that contains point
// Block the recognizer if touchedView is a UIButton, or a descendant of a UIButton
while (touchedView && touchedView != gestureView) {
if ([touchedView isKindOfClass:[UIButton class]])
return NO;
touchedView = touchedView.superview;
}
return YES;
}
太棒了!我错过了他如何说复数。 Tisk tisk。我的答案是从我的其他答案之一中复制出来的,这是一种排除方式。这对于倍数更好。 – NJones
我现在就试试看。奇怪的是,我没有从Stackoverflow得到关于此的通知。但这看起来确实是一个可靠的解决方案。谢谢你们回复! – Sumit