Tengo UIViewController en mi proyecto simple de storyboard IPad que contiene UIScrollView que se coloca sobre toda la superficie (1024 x 768). He creado 3 XI ter archivos que son los que UIViews mis cargas de aplicaciones en el arranque en viewDidLoad y añadirlos en UIScrollView. Cada uno de estos 3 archivos XIB contiene solo un UIButton.Detectar evento táctil en UIScrollView Y en los componentes de UIView [que se encuentra dentro de UIScrollView]
Esto es jerarquía:
~ UIViewController (UIViewControllerClass es la clase para este UIViewController)
~~ UIScrollView (contiene 3 UIViews idéntico)
~~~ UIView (UIViewClass es propietario del archivo para este archivo XI ter)
~~~~ UIButton
me gustaría que mi UIViewControllerClass se da cuenta de ambos: toque en cualquier parte componente UIScrollView Y si UIScrollView se toca, si UIButton interior de UIView en UIScrollView se toca, al tener información que exactamente eso se toca el botón.
Realicé IBAction dentro de UIViewClass para tocar en UIButton dentro de UIView en UIScrollView y cuando establezco User Interaction Enabled = YES en todos los elementos (UIViewController, UIView y UIScrollView) este método se llama como debería.
Pero en este punto mi UIViewControllerClass no es consciente de que toque ocurrió dentro UIScrollView en ese UIButton. Hice el reconocedor de contacto de esta manera:
UITapGestureRecognizer *touch = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTouch)];
touch.numberOfTouchesRequired = 1;
y lo agregué al componente UIScrollView. De esta manera soy capaz de detectar eventos táctiles en el componente UIScrollView en UIViewControllerClass, pero controlador de eventos táctil para UIButton en UIView que se encuentra dentro UIScrollView no se llama más.
Por lo tanto, necesita tener estas dos informaciones en UIViewControllerClass: Se ha
- táctil en el componente UIScrollView
- Touch en UIButton en UIView que se encuentra dentro UIScrollView (si este botón se tocó) se hizo
Supongo que asociar el reconocimiento de eventos táctiles a todo el componente UIScrollView no es una solución, ya que desactiva todos los controladores de eventos táctiles que escribí dentro de UIViewClass.
Creo que la solución es que de alguna manera los toques que se realizan en los componentes de UIView dentro de UIScrollView deben enviarse a UIViewControllerClass, pero no encontré la manera de hacerlo.
Si alguien me puede ayudar, estaría muy agradecido. Gracias por adelantado.
[editar # 1: Respuesta por Zheng]
Tap gesto debe tener cancelsTouchesInView opción se ajusta a NO!
Por mi caso anterior, esta línea soluciona todo:
touch.cancelsTouchesInView = NO;
Muchas gracias a Zheng.
¡Muchas gracias! Este problema tuyo no está relacionado con el mío, pero contiene una línea MUY importante para mí con la opción No sabía que UITapGestureRecognizer tiene - cancelsTouchesInView. No sabía que esta opción está establecida en SÍ de forma predeterminada, y ahora cuando lo configuro como NO, puedo detectar el toque en UIScrollView y también si el elemento que se toca dentro de UIScrollView tiene su controlador táctil, ese controlador está siendo llamado también. Gracias una vez más, resolvió mi problema con esa línea. – uerceg