¿Cómo puedo hacer que los events táctiles pasen por una UIView (similar a puntero-events: ninguno en CSS)?

En CSS, pointer-events:none; permite que los events de clic pasen por un elemento. Tengo curiosidad si hay algo similar que pueda hacer en Objective-C en iOS para UIView .

Aquí hay un jsfiddle a un ejemplo de puntero-events: ninguno.

¿Podría lograr de alguna manera el mismo comportamiento para una UIView anulando hitTest:withEvent: 😕 O tal vez hay otra manera de hacer esto?

Gracias por cualquier ayuda.

Lo que está buscando se denomina comúnmente "Evento burbujeando".

Puede consultar los documentos de Apple aquí: https://developer.apple.com/documentation/uikit/understanding_event_handling_responders_and_the_responder_chain

Entonces tu instinto básico era correcto, de hecho necesitas utilizar hitTest:withEvent: pero puedes personalizar aún más las cosas conectándote a la cadena Responder. Esa sección tiene un ejemplo muy claro.

Aquí hay una práctica implementación en línea con su intuición inicial:

 #import "TouchTransparentView.h" @implementation TouchTransparentView -(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event { id hitView = [super hitTest:point withEvent:event]; if (hitView == self) { return nil; } else { return hitView; } } @end 

Si buscas algo que actúe como pointer-events:none lo utilizaría

 yourView.userInteractionEnabled = NO 

Debería hacer básicamente lo mismo.

En swift:

 import UIKit class PassThroughView: UIView { override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { let hitView = super.hitTest(point, with: event) if hitView == self { return nil } else { return hitView } } } 

Pero tener que hacer esto es una mierda …