iOS 7的问题并滚动浏览包含UIButtons的UIScrollView

时间:2014-03-18 06:50:02

标签: ios objective-c ios7 uiscrollview

我的任务是更新我们没有写过的应用程序。它包含一个水平滚动的滚动视图,只包含UIButtons。按钮不仅具有打开它们所代表的应用程序的操作,而且如果轻敲并保持它们,则可以拖动它们。滚动视图下方还有另一个滚动视图,它接受拖动按钮。

在iOS 7之前,一切都已按预期运行。在iOS 7设备上,触摸滚动视图后即会注册按钮水龙头。该按钮将显示一个点亮状态,就像它被选中一样,滚动视图将开始滚动。在iOS 7之前的设备上,滚动视图将开始滚动而不是注册水龙头。

UIScrollView与iOS7有任何问题吗? setDelaysContentTouches:设置为YES,这可以防止这种情况发生。我不知所措。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我将许多按钮粘贴到要水平滚动的UIScrollView中。然后我使用自动布局布置这些按钮。尽我所能,使用-setDelaysContentTouches:YES-setExclusiveTouch:YES的组合,甚至在按钮上尝试-setUserInteractionEnabled:NO,没有任何效果。滚动视图不会滚动,只有按钮才会触摸事件。

结果是问题是使用自动布局。我不完全确定原因,但在禁用它并使用spring-n-structs排出按钮后,滚动视图按预期工作。滚动视图将滚动,如果我点击,则接收到的按钮会触摸。

所以也许尝试不在按钮上使用自动布局?

答案 1 :(得分:0)

一个大问题是按钮也可以拖动。它们可以被拖动并在自己的滚动视图中重新排序,或者移动到另一个滚动视图。我们最终做的是继承我们在滚动视图中使用的按钮。子类跟踪原始按钮所有者的身份并覆盖touchesBegan:touchesMoved:touchesCancelled:

当我们的按钮子类识别出触摸时,它将确定是否正在拖动按钮并调用适当的方法。然后我们首先在我们的触摸方法上调用super,然后在[self nextResponder]上调用。

这是公司代码,所以我不能直接发帖而不问。如果我没事,我会用实际代码更新我的答案。