以 UIScrollView 作为子类的 UIView 不接收触摸事件

Posted

技术标签:

【中文标题】以 UIScrollView 作为子类的 UIView 不接收触摸事件【英文标题】:UIView with UIScrollView as a subclass not receiving touch events 【发布时间】:2013-10-23 17:18:01 【问题描述】:

我正在使用带有触摸开始/移动/结束方法的 UIView。我已将 UIScrollView 添加为 UIView 的子视图。现在,在将 UIScrollView 添加为子视图后,我在这些触摸对应方法中没有收到任何触摸事件。我尝试设置UIScrollView 属性 canCancelContentTouches,delaysContentTouches 为 NO。但还是不行。

【问题讨论】:

您可以将滚动视图设置为setUserInteractionEnabled:NO 并在您的 UIView 触摸事件中处理滚动视图滚动。但否则,如果滚动视图的内容大小大于它的框架,它将消耗触摸事件。 【参考方案1】:

您可以覆盖 UIView 方法:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

确定触摸是否在子视图(滚动视图)的范围内并将它们传递给您的父视图

return [super hitTest:point withEvent:event];

return [super pointInside:point withEvent:event];

【讨论】:

但是这里的问题是 UIView 和 UIScrollView 的边界是一样的。

以上是关于以 UIScrollView 作为子类的 UIView 不接收触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式在子类 UIView 的子视图上自动布局

UIScrollView - 无法查看所有 UIView

检查 UIScrollView 是不是从子单元格滚动

以编程方式将触摸传递给 UIScrollView 以进行滚动

如何以编程方式自动旋转UIScrollView和UIImageView?

UIScrollview 窃取触摸事件