У меня есть вид прокрутки, который использовался для прокрутки, когда на нем не было кнопок. Теперь это происходит, и при перетаскивании мыши (на симуляторе) ничего не происходит (я думаю, потому что кнопки толкаются). Как я могу сделать это правильно?
ScrollView не прокручивается при перетаскивании кнопок
Ответ 1
Это происходит потому, что UIButton subviews UIScrollView (я предполагаю, что кнопки добавляются как подвид в вашем случае) отслеживают штрихи, а не прокрутку. UIScrollView метод touchesShouldCancelInContentView является ключевым здесь. Согласно его описанию: "Возвращаемое по умолчанию значение равно YES, если view не является объектом UIControl, в противном случае он возвращает NO.", То есть для UIControl объектов (кнопок), UIScrollView не пытается отменить которые предотвращают прокрутку.
Итак, чтобы разрешить прокрутку с помощью кнопок:
- Убедитесь, что для свойства
UIScrollViewcanCancelContentTouchesустановлено значение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)
}