如何在UIScrollView中取消滚动

问题描述:

我使用UIScrollView在iPhone上制作大尺寸(大于320像素)的用户界面。如何在UIScrollView中取消滚动

我做了一个UIScrollView的实例并添加了一些子视图。 问题是我只想在用户触摸子视图之外时启用滚动,当用户触摸其中一个子视图时, 停止滚动。

我阅读文档并试图找到示例,但我找不到好的提示。 如果您有任何想法,请帮助我。

+0

@Chris Hanson:你为什么从标签中删除iPhone和UIScrollView?这些是正确的标签 - 可可触摸可以添加,但不应该一个人在这里。 – Emil 2010-06-23 09:34:35

+0

我没有删除或编辑这些标签:( – 2010-06-24 04:51:24

+0

因为当我做了编辑时,用类名和冗余信息污染标签空间不是一个好主意,它依然不是,我只是放弃了 – 2010-07-01 04:27:36

如果要检测UIScrollView的任何子视图内的触摸,则必须继承UIScrollView子类并覆盖专门为此创建的touchesShouldBegintouchesShouldCancelInContentView方法。

除此之外,您无法识别子视图中的触摸,因为UIScrollView往往处理所有触摸本身,并且不会将它们传递给子视图。

一切顺利。

UIScrollView有一个scrollEnabled属性,允许您以编程方式禁用滚动。它也有一个委托(UIScrollViewDelegate),允许您查看诸如滚动开始/结束等事件。似乎你应该能够用某种方式结合这些选项来做点什么。

+0

谢谢您的回复 我会尽力解决您的问题 – 2008-12-20 14:13:31

+0

这是最好的解决方案,@Stephen:你很好:) – hungbm06 2010-01-15 09:16:17

您还可以下载UIScrollViewController并覆盖touchesBegan,touchesMoved和touchesEnded方法。如果您的实现永远不会调用超类实现,那么它将不会滚动。

对于滚动视图,最简单的方法是将delayContentTouches设置为NO。这样,默认行为被设置,以便UIControl的任何内容都能立即将触摸传递给控件,​​并且其他所有内容都将滚动。

你真的感兴趣的财产 - 我现在正在测试这个,因为我有同样的问题,你做 - 是canCancelContentTouches

如果此属性的值为NO, 滚动视图不滚动 无论手指的移动,一旦 内容视图开始跟踪。

如果不给你你想要的结果,子类的UIScrollView并重写touchesShouldBegin:withEvent:inContentView方法,这是公认的答案暗示什么。