ScrollView手势识别器吃所有的触摸事件

我有一个UIScrollView ,我添加了一个轻击手势识别器来显示/隐藏一些UI覆盖使用:

 UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; [scrollView addGestureRecognizer:singleTap]; 

和:

 - (void)handleTap:(UITapGestureRecognizer *)sender { // report click to UI changer } 

我在UIScrollView的底部添加了一个简单的表格视图 。 一切工作正常(水平和垂直滚动),但问题是,只有手势识别器(上面),而不是简单的表视图识别轻敲。 如果我删除注册手势监听器的行,一切工作正常,表视图通知自己点击。

这就好像手势识别器function在桌面视图上“吃”了轻敲事件,并且不会向下传播它们。

任何帮助表示赞赏

这应该可以解决你的问题。
检测UIScrollView上的触摸事件和UIView的组件[放置在UIScrollView中]
这个想法是告诉手势识别器不要吞噬触摸事件。 为此,您需要将singleTap的cancelsTouchesInView属性设置为NO ,默认为YES

 UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; singleTap.cancelsTouchesInView = NO; [scrollView addGestureRecognizer:singleTap]; 

Swift 3.0

  let singleTap = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))) singleTap.cancelsTouchesInView = false singleTap.numberOfTapsRequired = 1 scrollView.addGestureRecognizer(singleTap) 

而select器方法就像。

 func handleTap(_ recognizer: UITapGestureRecognizer) { // Perform operation } 

我认为原因是UIImageView的User Interaction Enabled设置为false 。 您应该将其设置为true以启用点击

您可以设置哪些对象将被包含/排除触摸。

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldReceiveTouch:(UITouch *)touch { if (touch.view == [self view]) { return YES; } return NO; } 

谢谢@ zambrey

Swift 2.2+版本:

 scrollView.delegate = self let allowMultipleTouches = UITapGestureRecognizer(target: self, action: #selector(genderPressed)) allowMultipleTouches.numberOfTapsRequired = 1 allowMultipleTouches.cancelsTouchesInView = false scrollView.addGestureRecognizer(allowMultipleTouches) 

如果您的滚动视图在故事板中,请不要忘记在视图控制器中固定sockets。 在这个例子中, scrollViewUIScrollView的出口。

TapGestures为我工作。 另一方面滑动,我不得不禁用滚动,它的工作。

  swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: #selector(swipeToNewImage(_:))) swipeLeftGesture.direction = .left scrollView.addGestureRecognizer(swipeLeftGesture) swipeRightGesture = UISwipeGestureRecognizer(target: self, action: #selector(swipeToNewImage(_:))) scrollView.addGestureRecognizer(swipeRightGesture) scrollView.isScrollEnabled = false 

您可以在UIScrollView中捕捉任何types的手势。 确保你也处理一些默认属性,就像设置cancelsTouchesInView属性为false,默认情况下是true。 还给你的子视图一些标签号来区分select器。 也可以使他们的用户交互为真。

让tap = UITapGestureRecognizer(target:self,action:

select(didTapByUser(_ :)))

Swift 4.0

 let singleTap = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))) singleTap.cancelsTouchesInView = false singleTap.numberOfTapsRequired = 1 scrollView.addGestureRecognizer(singleTap) 

select方法:

 @objc func handleTap(_ recognizer: UITapGestureRecognizer) { print("Tapped") } 

不要忘记@objc标签

这在Swift 3 / Xcode 8中适用于我

  self.scrollView.touchesShouldCancel(in: ** the view you want the touches in **) self.scrollView.canCancelContentTouches = false 

祝你好运!