У меня есть UIViewController в моем проекте простой раскадровки IPad, который содержит UIScrollView, который размещается по всей поверхности (1024 x 768). Я создал 3 файла XIB, которые представляют собой UIViews, которые мое приложение загружает при запуске в viewDidLoad и добавляет их в UIScrollView. Каждый из этих 3 файлов XIB содержит только один UIButton.
Это иерархия:
~ UIViewController ( UIViewControllerClass является классом для этого UIViewController)
~~ UIScrollView (содержит 3 идентичных UIViews)
~~~ UIView ( UIViewClass является файловым владельцем для этого файла XIB)
~~~~ UIButton
Мне бы хотелось, чтобы мой UIViewControllerClass узнал обо всех: касайтесь в любом месте компонента UIScrollView. И если коснется UIScrollView, если UIButton внутри UIView в UIScrollView коснулся, чтобы получить информацию о том, что именно эта кнопка была затронута.
Я сделал IBAction внутри UIViewClass для касания UIButton внутри UIView в UIScrollView, и когда я установил User Interaction Enabled = YES для всех элементов (UIViewController, UIView и UIScrollView), этот метод вызывается как следует.
Но в этот момент мой UIViewControllerClass не знает, что в UIScrollView на этом UIButton произошел штрих. Я сделал сенсорный распознаватель следующим образом:
UITapGestureRecognizer *touch = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTouch)];
touch.numberOfTouchesRequired = 1;
и добавил его в компонент UIScrollView. Таким образом, я могу обнаружить событие касания на компоненте UIScrollView в UIViewControllerClass, но обработчик событий для UIButton в UIView, который находится внутри UIScrollView, больше не вызывается.
Итак, мне нужно иметь эти две информации в UIViewControllerClass:
- Прикосновение к компоненту UIScrollView было сделано
- Нажмите на UIButton в UIView, который находится внутри UIScrollView (если эта кнопка была затронута) была сделана
Я полагаю, что добавление распознавателя распознавания событий для всего компонента UIScrollView не является решением, поскольку оно отключает все обработчики событий касания, которые я написал внутри UIViewClass.
Я думаю, что решение заключается в том, что каким-то образом затрагиваются компоненты, которые выполняются на UIView внутри UIScrollView, должны быть отправлены до UIViewControllerClass, но я не нашел способ сделать это.
Если кто-нибудь может мне помочь, я буду очень благодарен. Спасибо заранее.
[edit # 1: ANSWER by Zheng]
У жестов Tap должен быть параметр отмененTouchesInView установлен на НЕТ!
В моем случае выше эта строка решает все:
touch.cancelsTouchesInView = NO;
Большое спасибо Чжэн.