recognizer ios uiview uigesturerecognizer uiresponder uievent

ios - UIGestureRecognizer recibe el toque pero también lo reenvía a UIControl



tap gesture recognizer swift 4 (1)

¿Cómo permitiría que un UIGestureRecognizer de un UIView reciba un evento táctil, pero también se asegurará de que otro UIView superpuesto / UIView también reciba ese mismo evento táctil?

Digamos que tengo la siguiente hierachie de vista:

Las vistas A (azul) y B (rojo) son subvistas de la misma supervista (gris). En otras palabras, ambos son hermanos y la orden decide cuál de ellos cubre al otro.

Opción 1: Ver B (rojo) tiene un UIButton regular como su subvista. Opción 2: Vista A (azul) tiene un UIButton regular como su subvista.

Dada la Opción 1 por el bien de las explicaciones: La Vista A (azul) tiene un UITapGestureRecognizer (o tal vez incluso más, otros UIGestureRecognizers) adjuntos. ¿Cuál sería el enfoque más elegante para asegurarse de que UIButton recibe todos los toques en su región, pero también la vista A (azul) recibe esos toques en su UITapGestureRecognizer ?

Si es posible de cualquier manera, la solución no debe implicar la extensión de UIButton y el reenvío manual de eventos desde el botón mismo. Imagine que la vista B contendría muchos más controles y no solo un botón. Todos esos controles de alguna manera deberían permitir que la vista A reciba los toques en su UIGestureRecognizer .

Proporcioné dos opciones ya que no me importa cuál de esas vistas (A o B) es lo primero siempre y cuando ambas reciban los toques.

Todos mis enfoques llegaron abruptamente a callejones sin salida. Tal vez una cadena de respuesta personalizada sería una buena solución? Sigo pensando que debe haber una solución elegante dentro de toda la UIKit / UIEvent / UIResponder .


¿Has probado con this ?

cancelesTouchesInView Un valor booleano que afecta si los toques se entregan a una vista cuando se reconoce un gesto.

@property(nonatomic) BOOL cancelsTouchesInView