我有一个相当大的(在屏幕区域中)UIControl,我将其放入UIScrollView。作为一个UIControl,它劫持了所有触摸,任何从控件内部开始的拖动都不会被UIScrollView反映出来。
这个控件只需要UIControlEventTouchUpInside,那么有没有办法“只”监听那个事件?
我的第一直觉是覆盖hitTest:withEvent:并且如果检测到拖动则返回superview,但是它不提供有关控件事件的类型的任何信息。
我的最后一招是让它成为一个通用的UIView,但如果可能的话,我宁愿不去那条路。
修改
抱歉,为清楚起见,我故意将delayedContentTouches设置为NO以支持我正在处理的屏幕上的其他功能。无意的副作用导致了Joel H的第二点。
答案 0 :(得分:0)
尝试将UIScrollView的canCancelContentTouches
和delaysContentTouches
属性设置为YES。
当UIScrollView属性canCancelContentTouches
设置为YES时,它应该将任何滚动/拖动触摸传输到滚动视图,并取消在子视图中注册的任何触摸。
滚动视图的delaysContentTouches
也应设置为YES。这样可以防止拖动作为点击触发(因为处理程序很快就会触发)。