Как Обнаружить, “Приземляются” в суперпредставлении UIScrollView?

У меня есть a UIView это содержит a UIScrollView и я хочу смочь получить событие "Touch Down" в UIView любое время пользователь касается на UIScrollView.

Я попробовал включая все touchesBegan/Ended/Cancelled обработчики в моем UIViewController но ни один из них не уволен при ответвлении в UIScrollView содержавший в основном UIView.

Что лучший способ состоит в том, чтобы выполнить это?

7
задан Jayesh Thanki 12 July 2018 в 00:54
поделиться

3 ответа

В UIView реализовать touchesBegan:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // assign a UITouch object to the current touch
    UITouch *touch = [[event allTouches] anyObject];

    // if the view in which the touch is found is myScrollView
    // (assuming myScrollView is the UIScrollView and is a subview of the UIView)
    if ([touch view] == myScrollView) {
        // do stuff here
    }
}

Примечание: убедитесь, что для userInteractionEnabled в UIView установлено значение YES.

2
ответ дан 7 December 2019 в 20:34
поделиться

Вам нужно отключить взаимодействие пользователя с представлением прокрутки как таковым ...

scrollView.userInteractionEnabled = NO;

После отключения супервизор UIScrollView получает событие touchesBegan.

-3
ответ дан 7 December 2019 в 20:34
поделиться

Вы также можете реализовать hitTest:withEvent: в своем подклассе UIView. Этот метод вызывается для определения того, какое вложенное представление должно получить событие касания. Таким образом, здесь вы можете либо просто отслеживать все события, проходящие через ваше представление, либо скрыть некоторые события от вложенных представлений. В этом случае вам может не понадобиться отключать взаимодействие с пользователем для вашего вида прокрутки.

Более подробную информацию об этом методе можно найти в UIView class reference.

1
ответ дан 7 December 2019 в 20:34
поделиться