拖动button时,ScrollView不滚动
我有一个滚动视图,用来滚动时,它没有button。 现在它,当拖动鼠标(在模拟器上)什么都没有发生(我认为是因为button被推)。 我怎样才能做到这一点?
这是因为UIButton
子视图的UIScrollView
(我假设button被添加为你的情况下的子视图)跟踪触摸,而不是滚动视图。 UIScrollView
方法touchesShouldCancelInContentView
了这个关键内容在这里是关键。 根据描述:“如果view不是一个UIControl
对象,那么默认的返回值是YES;否则返回NO
。”,即对于UIControl
对象(button), UIScrollView
不会尝试取消防止滚动的触摸。
所以,要允许button滚动:
- 确保
UIScrollView
属性canCancelContentTouches
设置为YES
。 - 当内容视图对象是
UIButton
,子类UIScrollView
并重写touchesShouldCancelInContentView
以返回YES
,如下所示:
- (BOOL)touchesShouldCancelInContentView:(UIView *)view { if ( [view isKindOfClass:[UIButton class]] ) { return YES; } return [super touchesShouldCancelInContentView:view]; }
我build立了这个问题寻找这个问题的迅速解决scheme,我“翻译”它是这样的:
class UIButtonScrollView: UIScrollView { override func touchesShouldCancelInContentView(view: UIView!) -> Bool { if (view.isKindOfClass(UIButton)) { return true } return super.touchesShouldCancelInContentView(view) } }
希望这可以帮助
Swift 3解决scheme
override func touchesShouldCancel(in view: UIView) -> Bool { if view is UIButton { return true } return super.touchesShouldCancel(in: view) }