我有一个UIView
其中我加了一个UITapGestureRecognizer
。在这个视图里面我也有一个子视图,其中基本上是某种UITableView
。问题是,为什么UITableView
不能识别连续的水龙头,而是始终一直转到水龙头手势识别器的处理程序。为什么是这样的,我该如何解决这个问题?如果我将抽头数设置为2,那么它工作正常。任何想法如何解决这个问题?基本上它不叫didSelectRowAtIndexPath
。在UIView和UITableView中冲突的UITapGestureRecognizer
回答
将您的识别器的cancelsTouchesInView
设置为NO
。否则,它为自己“消费”触觉,并且不会将它传递给表视图。这就是选择事件从未发生的原因。
如果你想都您UITableView
和你UITapGestureRecognizer
接收触摸事件,然后是该cancelsTouchesInView = NO
会工作。如果你想让轻击手势识别器不接收用于表格视图的触摸事件,那么它稍微不容易,但非常可行。
基本上,当您创建您的手势识别器时,您将自己设置为其代表。然后执行gestureRecognizer:shouldReceiveTouch:
委托方法。基本的实现可能看起来像这样。
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
UITableView *tableView = self.tableView;
CGPoint touchPoint = [touch locationInView:tableView];
return ![tableView hitTest:touchPoint withEvent:nil];
}
本质上讲,这方法(如实施)询问tableView
如果该触摸的位置的tableView
的管辖范围内下降,并且如果这样做,它会接收来自所述触摸...允许tableView
方框手势识别接受触摸。
我们不能通过将第3行和第4行更改为:CGRect frame = self.tableView.frame; CGRectContainsPoint(frame,location);'? – Aufwind 2012-11-23 12:43:35
@Aufwind感谢您指出我过于复杂的计算代码。我一定是匆忙回答了这个问题。 'CGRectContainsPoint()'当然是一个更好的方法来处理这个计算,然后我最初选择。不过,我编辑了我的答案,使用'hitTest:withEvent:'。由于几个原因,这将是我的首选方法。其中之一将是一个不规则形状的视图。如果一个视图被呈现为不规则形状(例如,只处理圆圈区域中的触摸的圆圈)。这种情况不会通过我正在执行的手动计算得到妥善处理。再次感谢。 – NJones 2012-11-24 03:54:28
不客气。 :-) – Aufwind 2012-11-24 20:36:57
- 1. UIWebView和UITapGestureRecognizer冲突的UIScrollView
- 2. CGAfflineTransform的UIView和CoreGraphics在冲突
- 3. UITableView和UIScrollViewDelegate是否存在冲突?
- 4. 两个UITapGestureRecognizer在UIView的
- 5. UIView和UITableView
- 6. UITapGestureRecognizer不工作在UIView的顶点
- 7. UINavigationController与UIView和UITableView
- 8. UITapGestureRecognizer not working on UIView animated
- 9. UITapGestureRecognizer无法添加到UIView?
- 10. 冲突的UITableView编辑功能
- 11. UITableView的滑动手势冲突刷卡
- 12. UITableView和UIView在一个UIViewController中
- 13. AutoMapper和AutoFixture中的冲突
- 14. 使用KVO在UITableView中删除行的冲突
- 15. 手势冲突UITableView滑动删除iOS
- 16. 动画问题与UITableView中和的UIView
- 17. ggvis和rpivottable在Shiny中的冲突
- 18. 的UITableView和的UIView在MasterViewController,UIView的无形
- 19. 在UIScrollview的UIView中的UITableView:在UITableView中的数据被清除
- 20. UITapGestureRecognizer回应不正确的UIView
- 21. 错误的UITapGestureRecognizer被调用(在错误的UIView中)
- 22. UITapGestureRecognizer在Swift中打破SearchField类中的UITableView didSelectRowAtIndexPath?
- 23. UIView滑动手势与目标c中的tableview冲突
- 24. 在css中的冲突
- 25. JQuery在angular2中的冲突
- 26. CGAffineTransform和NSLayoutConstraint冲突
- 27. php.ini和magento冲突
- 28. GoogleToolboxForMac.framework和GoogleOpenSource.framework冲突
- 29. AngularJS和jQuery冲突
- 30. _ATL_APARTMENT_THREADED和_ATL_FREE_THREADED冲突
[将此值设置为'NO'可指示识别器将底层视图的所有触摸传送到底层视图,即使它已识别序列。](http://developer.apple.com/library/IOs/#documentation/ UIKit/Reference/UIGestureRecognizer_Class/Reference/Reference.html) – dasblinkenlight 2012-01-18 02:34:01
示例代码'longPressGestureRecognizer.cancelsTouchesInView = NO;' (谢谢dasblinkenlight) – tmr 2015-01-14 07:21:49
@dasblinkenlight仍然没有为我工作,我无法执行我的表格视图单元格上的触摸事件,我无法从表格视图单元格中选择项目,我已经使用'func tableView(_ tableView:UITableView,didSelectRowAt indexPath:IndexPath)'但项目没有被选择 – 2017-08-27 06:12:21