拖动button时,ScrollView不滚动

我有一个滚动视图,用来滚动时,它没有button。 现在它,当拖动鼠标(在模拟器上)什么都没有发生(我认为是因为button被推)。 我怎样才能做到这一点?

这是因为UIButton子视图的UIScrollView (我假设button被添加为你的情况下的子视图)跟踪触摸,而不是滚动视图。 UIScrollView方法touchesShouldCancelInContentView了这个关键内容在这里是关键。 根据描述:“如果view不是一个UIControl对象,那么默认的返回值是YES;否则返回NO 。”,即对于UIControl对象(button), UIScrollView不会尝试取消防止滚动的触摸。

所以,要允许button滚动:

  1. 确保UIScrollView属性canCancelContentTouches设置为YES
  2. 当内容视图对象是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) }