UIButton 没有响应嵌套在另一个 UIScrollView 中的 UIScrollView 中的触摸

Posted

技术标签:

【中文标题】UIButton 没有响应嵌套在另一个 UIScrollView 中的 UIScrollView 中的触摸【英文标题】:UIButton not responding to touch in UIScrollView nested in another UIScrollView 【发布时间】:2015-10-09 09:28:29 【问题描述】:

我一直在尝试解决以下问题: 我有一个UIScrollView(垂直滚动),其中嵌套了另一个UIScrollView(水平)。 UIScrollViews 也有 UIButtons 嵌套在其中。但是,UIButtons 仅响应父 UIScrollView(垂直)中的触摸。

由于某种原因,水平(嵌套)UIScrollView 中的UIButtons 似乎没有响应触摸。

我已经尝试了以下所有方法:

继承 UIScrollViews 并覆盖 touchesShouldCancelInContentView 方法,如下所示:

override func touchesShouldCancelInContentView(view: UIView) -> Bool         

   return !view.isKindOfClass(UIButton)

 

我还尝试从父 UIScrollView 中取消对嵌套 UIScrollView 的触摸,但后来我无法再垂直滚动了。

我的UIScrollViews 都有以下内容:

UISCROLLVIEW.delaysContentTouches = false
UISCROLLVIEW.canCancelContentTouches = true

我尝试过处理这些值,但从未设法在嵌套在嵌套的UIScrollView 中的UIButton 上获得触摸事件。我已经到了开始怀疑这是否真的可能的地步……尽管看起来 AppStore 正在这样做。还是因为他们使用的是UICollectionViews

有什么建议吗?

编辑: 当我单击 UIButton 时,我想确保 UIScrollView 的触摸事件被取消,所以我记录了 UIScrollView 的 touchesBegan 并且果然我在 UIScrollView 的任何地方都得到了一个打印,当我触摸 UIButton 时除外.但是 - 这很奇怪 - 如果我将 UIButton 子类化并覆盖 touchesBegan 我不会得到日志!真是亏大了……

【问题讨论】:

只是提醒一下,使用嵌套的滚动视图并不是最佳实践,即使它们滚动到不同的方向。除了这些问题,您可能很难手动处理内容偏移和大小。尝试在另一个滚动视图中使用集合视图或 pageviewcontroller 来实现这一点。也许有帮助。 @Akeara:你从哪里看出这是不好的做法?我在任何地方都看不到苹果这么说。相反(developer.apple.com/library/ios/documentation/WindowsViews/…)。此外,UICollectionView 只不过是 UIScrollView 的子类。 【参考方案1】:

把按钮放在前面

bringSubviewToFront:

【讨论】:

已经试过了。绝对是在前面。我实际上可以知道什么时候点击它,因为如果我对它进行子类化,我可以在整个视图上获得 touchesBegan 事件......除非我点击 UIButton【参考方案2】:

试试看。

yourButtonObject.layer.zPosition = 1

【讨论】:

这里也一样。该问题很可能与能够访问 UIButton 无关。更多与在其上取消的触摸操作有关 @Sankalap 这是为了回答 OP 的问题吗?在这种情况下,您能否详细说明您的单线如何提供解决方案?

以上是关于UIButton 没有响应嵌套在另一个 UIScrollView 中的 UIScrollView 中的触摸的主要内容,如果未能解决你的问题,请参考以下文章

响应式表不填充它嵌套的整个列

IOS UIScrollView + UIButton 实现页面和顶部标签页水平滚动效果

UIButton 作为子视图没有响应

UIButton 没有响应

UIButton 对快速点击没有响应

UIPickerview 中的 UIButton 没有响应