У меня есть вид прокрутки, который использовался для прокрутки, когда на нем не было кнопок. Теперь это происходит, и при перетаскивании мыши (на симуляторе) ничего не происходит (я думаю, потому что кнопки толкаются). Как я могу сделать это правильно?
ScrollView не прокручивается при перетаскивании кнопок
Ответ 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)
}