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 中的触摸的主要内容,如果未能解决你的问题,请参考以下文章