iOS 7 的问题和滚动包含 UIButtons 的 UIScrollView
Posted
技术标签:
【中文标题】iOS 7 的问题和滚动包含 UIButtons 的 UIScrollView【英文标题】:Issues with iOS 7 and scrolling through a UIScrollView that contains UIButtons 【发布时间】:2014-03-18 06:50:02 【问题描述】:我的任务是更新一个不是我编写的应用程序。它包含一个水平滚动的滚动视图,并且只包含 UIButtons。这些按钮不仅具有打开它们所代表的应用程序的操作,而且如果点击并按住它们可以拖动它们。有问题的滚动视图下方还有另一个滚动视图,它接受按钮的拖动。
在 ios 7 之前,一切都已按预期工作。在 iOS 7 设备上,一旦触摸滚动视图,就会注册按钮点击。该按钮将显示点亮状态,就像它被选中一样,并且滚动视图将开始滚动。在 iOS 7 之前的设备上,滚动视图将开始滚动,而不是注册点击。
任何人在使用 iOS7 的 UIScrollView 时遇到任何问题? setDelaysContentTouches: 设置为 YES,这应该可以防止这种情况发生。我很茫然。
【问题讨论】:
【参考方案1】:我遇到了同样的问题。我将一些按钮粘贴到要水平滚动的UIScrollView
中。然后我使用自动布局来布置这些按钮。尽我所能尝试,使用-setDelaysContentTouches:YES
和-setExclusiveTouch:YES
的组合,甚至在按钮上尝试-setUserInteractionEnabled:NO
,没有任何效果。滚动视图不会滚动,只有按钮有触摸事件。
问题出在自动布局的使用上。我不完全确定为什么,但是在禁用它并使用 springs-n-structs 放置按钮之后,滚动视图按预期工作。滚动视图会滚动,如果我只是点击,按钮就会收到触摸。
所以也许试着不在按钮上使用自动布局?
【讨论】:
感谢您的评论!很高兴有人真的尝试了。没有使用自动布局。我们实际上解决了它,我现在将发布如何。【参考方案2】:其中一个大问题是按钮也可以拖动。它们可以被拖动并在自己的滚动视图中重新排序,或者移动到另一个滚动视图。我们最终做的是对滚动视图中使用的按钮进行子类化。子类跟踪原始按钮所有者是谁并覆盖 touchesBegan:
、 touchesMoved:
和 touchesCancelled:
。
当我们的按钮子类识别触摸时,它将确定按钮是否被拖动并调用适当的方法。然后,我们会先在我们的 touch 方法上调用 super,然后在 [self nextResponder]
上调用。
这是公司代码,所以我不能不问就直接发布。如果没问题,我会用实际代码更新我的答案。
【讨论】:
以上是关于iOS 7 的问题和滚动包含 UIButtons 的 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章
带有 UIButtons 的 UIScrollView - 当按钮开始触摸时,滚动视图不会滚动
滚动 UICollectionView 时忽略嵌入式 UIButtons 的触摸事件
我应该如何在 iOS 7 中使用具有 iOS 6 风格的 UIButtons?