Подтвердить что ты не робот

ScrollView не прокручивается при перетаскивании кнопок

У меня есть вид прокрутки, который использовался для прокрутки, когда на нем не было кнопок. Теперь это происходит, и при перетаскивании мыши (на симуляторе) ничего не происходит (я думаю, потому что кнопки толкаются). Как я могу сделать это правильно?

4b9b3361

Ответ 1

Это происходит потому, что UIButton subviews UIScrollView (я предполагаю, что кнопки добавляются как подвид в вашем случае) отслеживают штрихи, а не прокрутку. UIScrollView метод touchesShouldCancelInContentView является ключевым здесь. Согласно его описанию: "Возвращаемое по умолчанию значение равно YES, если view не является объектом UIControl, в противном случае он возвращает NO.", То есть для UIControl объектов (кнопок), UIScrollView не пытается отменить которые предотвращают прокрутку.

Итак, чтобы разрешить прокрутку с помощью кнопок:

  • Убедитесь, что для свойства UIScrollView canCancelContentTouches установлено значение YES.
  • Подкласс UIScrollView и переопределить touchesShouldCancelInContentView, чтобы вернуть YES, когда объектом просмотра контента является UIButton, например:
- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
    if ( [view isKindOfClass:[UIButton class]] ) {
        return YES;
    }

    return [super touchesShouldCancelInContentView:view];
}

Ответ 2

Я основал этот вопрос в поисках быстрого решения этой проблемы, я "перевел" его так:

class UIButtonScrollView: UIScrollView {

    override func touchesShouldCancelInContentView(view: UIView!) -> Bool {
        if (view.isKindOfClass(UIButton)) {
            return true
        }

        return super.touchesShouldCancelInContentView(view)

    }

}

надеюсь, что это может помочь

Ответ 3

Решение Swift 3

override func touchesShouldCancel(in view: UIView) -> Bool {
    if view is UIButton {
        return true
    }
    return super.touchesShouldCancel(in: view)
}