拖动按钮时ScrollView不滚动

时间:2010-08-18 13:27:33

标签: ios cocoa-touch uiscrollview uibutton ios-simulator

我有一个滚动视图,用于在没有按钮的情况下滚动。现在它确实如此,当拖动鼠标时(在模拟器上)没有任何反应(我认为因为按钮被推动)。我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:95)

这种情况正在发生,因为UIButton的{​​{1}}子视图(我假设按钮在您的情况下被添加为子视图)正在跟踪触摸而不是滚动视图。 UIScrollView方法UIScrollView是此处的关键。根据其描述:“如果视图不是touchesShouldCancelInContentView对象,则默认返回值为YES;否则返回UIControl。”,即NO个对象(按钮),{{ 1}}不会尝试取消阻止滚动的触摸。

所以,允许滚动按钮:

  1. 确保UIControl属性UIScrollView设置为UIScrollView
  2. 子类canCancelContentTouches并覆盖YES以在内容视图对象为UIScrollView时返回touchesShouldCancelInContentView,如下所示:
  3. 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;
}