У меня есть a UIView
это содержит a UIScrollView
и я хочу смочь получить событие "Touch Down" в UIView
любое время пользователь касается на UIScrollView
.
Я попробовал включая все touchesBegan/Ended/Cancelled обработчики в моем UIViewController
но ни один из них не уволен при ответвлении в UIScrollView
содержавший в основном UIView
.
Что лучший способ состоит в том, чтобы выполнить это?
В 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.
Вам нужно отключить взаимодействие пользователя с представлением прокрутки как таковым ...
scrollView.userInteractionEnabled = NO;
После отключения супервизор UIScrollView получает событие touchesBegan.
Вы также можете реализовать hitTest:withEvent:
в своем подклассе UIView. Этот метод вызывается для определения того, какое вложенное представление должно получить событие касания. Таким образом, здесь вы можете либо просто отслеживать все события, проходящие через ваше представление, либо скрыть некоторые события от вложенных представлений. В этом случае вам может не понадобиться отключать взаимодействие с пользователем для вашего вида прокрутки.
Более подробную информацию об этом методе можно найти в UIView
class reference.