如何取消UIScrollView中的滚动

fis*_*ato 16 iphone cocoa-touch uiscrollview

我使用UIScrollView在iPhone上制作大尺寸(大于320像素)的UI.

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

我阅读文件并试图找到样品,但我找不到好的提示.如果您有任何想法,请帮助我.

Ste*_*ton 36

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

  • 很好的答案,模糊但足以开始.+1 (2认同)

Dan*_*ark 8

您真正感兴趣的属性 - 我现在正在测试它,因为我遇到了同样的问题 - 是canCancelContentTouches.

如果此属性的值为NO,则在内容视图开始跟踪后,无论手指移动,滚动视图都不会滚动.

如果这不能提供您想要的结果,则将UIScrollView子类化并覆盖该touchesShouldBegin:withEvent:inContentView方法,这是接受的答案所暗示的.


los*_*sit 5

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

除此之外,您无法识别子视图中的触摸,因为UIScrollView倾向于自己处理所有触摸并且不会将它们传递给其子视图.

祝一切顺利.


Dav*_*wer 5

要做到这一点,最简单的方法是设置delayContentTouchesNO用于滚动视图。这样,就可以设置默认行为,以便UIControl中的任何内容都可以立即将触摸传递给控件,​​其他所有内容都可以滚动。

  • 如果将其设置为NO,则行为与OP想要的相反。如果将其设置为“是”,那就更好了:) (2认同)