如何在UIScrollView中取消滚动
我使用UIScrollView在iPhone上制作大尺寸(大于320像素)的用户界面。如何在UIScrollView中取消滚动
我做了一个UIScrollView的实例并添加了一些子视图。 问题是我只想在用户触摸子视图之外时启用滚动,当用户触摸其中一个子视图时, 停止滚动。
我阅读文档并试图找到示例,但我找不到好的提示。 如果您有任何想法,请帮助我。
如果要检测UIScrollView的任何子视图内的触摸,则必须继承UIScrollView子类并覆盖专门为此创建的touchesShouldBegin
和touchesShouldCancelInContentView
方法。
除此之外,您无法识别子视图中的触摸,因为UIScrollView往往处理所有触摸本身,并且不会将它们传递给子视图。
一切顺利。
UIScrollView有一个scrollEnabled属性,允许您以编程方式禁用滚动。它也有一个委托(UIScrollViewDelegate),允许您查看诸如滚动开始/结束等事件。似乎你应该能够用某种方式结合这些选项来做点什么。
谢谢您的回复 我会尽力解决您的问题 – 2008-12-20 14:13:31
这是最好的解决方案,@Stephen:你很好:) – hungbm06 2010-01-15 09:16:17
您还可以下载UIScrollViewController并覆盖touchesBegan,touchesMoved和touchesEnded方法。如果您的实现永远不会调用超类实现,那么它将不会滚动。
对于滚动视图,最简单的方法是将delayContentTouches
设置为NO
。这样,默认行为被设置,以便UIControl的任何内容都能立即将触摸传递给控件,并且其他所有内容都将滚动。
你真的感兴趣的财产 - 我现在正在测试这个,因为我有同样的问题,你做 - 是canCancelContentTouches
。
如果此属性的值为NO, 滚动视图不滚动 无论手指的移动,一旦 内容视图开始跟踪。
如果不给你你想要的结果,子类的UIScrollView并重写touchesShouldBegin:withEvent:inContentView
方法,这是公认的答案暗示什么。
@Chris Hanson:你为什么从标签中删除iPhone和UIScrollView?这些是正确的标签 - 可可触摸可以添加,但不应该一个人在这里。 – Emil 2010-06-23 09:34:35
我没有删除或编辑这些标签:( – 2010-06-24 04:51:24
因为当我做了编辑时,用类名和冗余信息污染标签空间不是一个好主意,它依然不是,我只是放弃了 – 2010-07-01 04:27:36