我有一个滚动视图,用于在没有按钮的情况下滚动。现在它确实如此,当拖动鼠标时(在模拟器上)没有任何反应(我认为因为按钮被推动)。我怎样才能做到这一点?
答案 0 :(得分:95)
这种情况正在发生,因为UIButton
的{{1}}子视图(我假设按钮在您的情况下被添加为子视图)正在跟踪触摸而不是滚动视图。 UIScrollView
方法UIScrollView
是此处的关键。根据其描述:“如果视图不是touchesShouldCancelInContentView
对象,则默认返回值为YES;否则返回UIControl
。”,即NO
个对象(按钮),{{ 1}}不会尝试取消阻止滚动的触摸。
所以,允许滚动按钮:
UIControl
属性UIScrollView
设置为UIScrollView
。 canCancelContentTouches
并覆盖YES
以在内容视图对象为UIScrollView
时返回touchesShouldCancelInContentView
,如下所示:YES
答案 1 :(得分:9)
我创建了这个问题,寻找这个问题的快速解决方案,我“翻译”它是这样的:
class UIButtonScrollView: UIScrollView {
override func touchesShouldCancelInContentView(view: UIView!) -> Bool {
if (view.isKindOfClass(UIButton)) {
return true
}
return super.touchesShouldCancelInContentView(view)
}
}
希望这可以帮助
答案 2 :(得分:5)
Swift 3解决方案
override func touchesShouldCancel(in view: UIView) -> Bool {
if view is UIButton {
return true
}
return super.touchesShouldCancel(in: view)
}
答案 3 :(得分:0)
如果您在模拟器中看到这一点,那么尝试的一件事就是在实际的手机上运行。我无法在模拟器中滚动,但在手机上没有问题。
答案 4 :(得分:0)
对于我来说,我是用这种方式解决的。
在ViewDidLoad中
self.scrollView.panGestureRecognizer.delaysTouchesBegan = self.scrollView.delaysContentTouches;
in .m
- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
if ([view isKindOfClass:[UIControl class]]) return YES;
return NO;
}