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