Это происходит потому, что UIButton
подпредставления UIScrollView
(я предполагаю, что кнопки добавляются как подпредставления в вашем случае) отслеживают касания, а не представление прокрутки. UIScrollView
метод touchesShouldCancelInContentView
является ключом здесь. В соответствии с его описанием: «Возвращаемым значением по умолчанию является YES, если представление не является объектом 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];
}