UIScrollView 没有将触摸传递给子视图?

Posted

技术标签:

【中文标题】UIScrollView 没有将触摸传递给子视图?【英文标题】:UIScrollView not passing touches to subviews? 【发布时间】:2015-04-27 22:09:36 【问题描述】:

我有一个滚动视图,我在故事板的这个滚动视图中嵌入了 3 个控制器,并在它们之间水平页面。

滚动视图的内容大小为 (scrollViewWith * numberOfControllers , scrollViewHeight)

scrollview 出现,我可以水平滚动视图,但视图没有检测到任何触摸。 (嵌入的控制器内部有collectionViews)

我在其中一个控制器中实现了 touchesBegin,但它从未被调用过。

知道什么会导致滚动视图不将触摸传递给子视图吗?

【问题讨论】:

【参考方案1】:

这不一定是为什么触摸事件没有进入集合视图的答案,但听起来你正在重新实现 UIPageViewController 并将 transitionStyle 设置为 .Scroll。也许考虑改用它?

【讨论】:

UIPageViewController 不起作用,因为我在滚动视图顶部有一个标签栏,假设与控制器交互,以及页面之间滚动的自定义动画 听起来不错。这不是每个人都知道的常见控制,所以我想我会尝试为您节省一些痛苦。 :)【参考方案2】:

通过嵌入式segue向控制器添加视图时,viewController的视图不会直接添加到主视图中,而是在添加到主视图之前嵌入到另一个容器视图中

ViewControllerView->EmbedView->EmbededViewControllerView

所以我最终将它们都删除了,并手动将 viewControllers 的视图添加到 scrollView

【讨论】:

【参考方案3】:

你在 UIScrollView 的每个页面中都有什么样的视图?

您可以在其中添加任何内容,例如 UICollectionView,防止内部不通过触摸的唯一方法是将 UIScrollView 设置为:

self.scrollView.userInteractionEnabled = NO;

【讨论】:

“防止内部不通过触摸的唯一方法是将 UIScrollView 设置为 ...”这是不正确的,您可以覆盖 hitTest 并限制触摸。 是的,你是对的,这是另一种方式:),但是你解决了你的问题吗? 是的,我花了一整天的时间来解决这个愚蠢的问题。我在下面发布了答案,是故事板中的 containerView 导致了问题:(

以上是关于UIScrollView 没有将触摸传递给子视图?的主要内容,如果未能解决你的问题,请参考以下文章

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

将触摸信息传递给另一个 UIView 下的 UIScrollView

如何将触摸事件从 ScrollView 子视图传递到它的父视图

将一个水龙头从 UIScrollView 传递到其父视图

UIScrollView下的UIButton没有响应触摸

如何阻止 UIScrollView 吞下触摸