1

我有一个相当大的(屏幕状态)UIControl,我将其放入 UIScrollView。作为一个 UIControl,它会劫持所有的触摸,并且从控件内部开始的任何拖动都不会被 UIScrollView 反映。

这个控件只需要UIControlEventTouchUpInside,那么有没有办法“只”监听那个事件呢?

我的第一直觉是覆盖 hitTest:withEvent: 并在检测到拖动时返回超级视图,但这并没有提供有关控制事件类型的任何信息。

我最后的手段是让它成为一个通用的 UIView,但如果可能的话,我宁愿不走那条路。

编辑:

抱歉,为了清楚起见,我故意将 delaysContentTouches 设置为 NO 以支持我正在处理的屏幕上的其他功能。意外的副作用导致了 Joel H 的第二点。

4

1 回答 1

0

尝试将UIScrollView的canCancelContentTouches和属性都设置为 YES。delaysContentTouches

当 UIScrollView 属性canCancelContentTouches设置为 YES 时,它应该将任何滚动/拖动触摸转移到滚动视图并取消在子视图中注册的任何触摸。

滚动视图delaysContentTouches也应该设置为 YES。这将防止拖动被触发为点击(因为处理程序启动得太快了)。

UIScrollView 类参考

于 2013-09-05T20:17:51.333 回答