Обнаружение сенсорного события в UIScrollView И в компонентах UIView [который находится внутри UIScrollView]
У меня есть UIViewController в моем простом проекте раскадровки IPad, который содержит UIScrollView, который размещен по всей поверхности (1024 x 768). Я создал 3 файла XIB, которые представляют собой UIViews, которые мое приложение загружает при запуске в viewDidLoad, и добавляют их в UIScrollView. Каждый из этих 3 файлов XIB содержит только одну кнопку UIB.
Это иерархия:
~ UIViewController (UIViewControllerClass is class for this UIViewController)
~~ UIScrollView (contains 3 identical UIViews)
~~~ UIView (UIViewClass is File's Owner for this XIB file)
~~~~ 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:
Touch on UIScrollView component was made Touch on UIButton in UIView which is inside UIScrollView (if this button was touched) was madeЯ предполагаю, что присоединение распознавателя событий касания ко всему компоненту UIScrollView не является решением, поскольку оно отключает все обработчики событий касания, которые я написал внутри UIViewClass.
Я думаю, что решение состоит в том, что каким-то образом штрихи, которые делаются на компонентах в UIView внутри UIScrollView, должны быть отправлены до UIViewControllerClass, но я не нашел способа сделать это.
Если кто-нибудь может мне помочь, я буду очень признателен. Заранее спасибо.
[edit #1: ANSWER by Zheng]
Жест должен бытьcancelsTouchesInView опция установлена вNO!
Для моего случая выше эта строка решает все:
touch.cancelsTouchesInView = NO;
Большое спасибо Чжэн.