UIButton внутри UIScrollView не срабатывает при нажатии
UIButton внутри UIScrollView не срабатывает при нажатии. Пожалуйста, помогите решить проблему.
// Add a button
UIButton *btn1 = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
btn1.frame = CGRectMake(0, 0, 26, 18);
btn1.bounds = CGRectMake(0, 0, 30.0, 30.0);
[btn1 addTarget:self action:@selector(buttonClick1:)
forControlEvents:UIControlEventTouchUpInside];
[scrollView addSubview:btn1];
- (void)buttonClick1:(id)sender {
int dd = 4;
}
Ответы
Ответ 1
Я нашел этот материал:
Но scrollview блокирует касается кнопки, если вы не установили userInteractionEnabled и Свойства exclusiveTouch для NO на Scrollview. Но это победит цель иметь прокрутку внутри Я думаю, кнопка.
(См. Можем ли мы поместить UIButton в UIScrollView и наоборот в iPhone)
Но как это сделать?
Скажите, что у вас есть UIScrollView * sv... then
sv.userInteractionEnabled = YES;
sv.exclusiveTouch = YES;
Я бы также добавил
sv.canCancelContentTouches = YES;
sv.delaysContentTouches = YES;
Ответ 2
Вы должны установить размер содержимого вашего представления. Это должно быть больше или равно размеру содержимого scrollView.
Поскольку размер вашего изображения по умолчанию - 320 x 480 (3.5 "сетчатки) и 320 x 568 (4" сетчатки). Таким образом, увеличивая высоту представления как:
self.view.frame=CGRectMake(0, 0, 320, 700);
Затем добавив это как подзаголовок вашего scrollView, вы получите решение.
Ответ 3
OLD ANSWER: Все, что мне нужно было сделать в iOS 7, было установлено
[_scrollView setDelaysContentTouches:NO];
ОБНОВЛЕНИЕ:. После небольшого исследования выяснилось, что если ваша проблема заключается в том, что щелчок UIButton
, по-видимому, иногда вызван, то на самом деле это, вероятно, желаемое поведение внутри UIScrollView
. A UIScrollView
использует свойство delaysContentTouches, чтобы автоматически определить, пытался ли пользователь прокручивать или пытаться нажать кнопку внутри прокрутки. Я бы предположил, что лучше не изменять это поведение по умолчанию на NO
, так как это приведет к невозможности прокрутки, если палец пользователя находится над кнопкой.
Ответ 4
Я столкнулся с такой же проблемой, что я и сделал, вместо добавления кнопки в представление контейнера, я добавил ее в вид прокрутки в верхней части представления контейнера:
scrollView.insertSubview(buttonA, aboveSubview: containerView)
Моя структура была:
-View
--ScrollView
---ContainerView
Я надеюсь, что это может помочь любому.
Ответ 5
Это работает для меня в iOS 10
scrollView.delaysContentTouches = false
От Apple:
Логическое значение, определяющее, задерживает ли просмотр прокрутки обработку жестов прикосновения.
https://developer.apple.com/documentation/uikit/uiscrollview/1619398-delayscontenttouches