Questa citazione sarà rispondere alla tua domanda sul motivo per cui si comporta così:
Eventi di tocco. L'oggetto window utilizza hit-testing e la catena responder per trovare la vista per ricevere l'evento touch. In hit-testing, una finestra chiama hitTest: withEvent: nella parte superiore della vista della gerarchia della vista; questo metodo procede ricorsivamente chiamando pointInside: withEvent: su ogni vista nella gerarchia della vista che restituisce SÌ, procedendo lungo la gerarchia finché non trova la sottoview entro cui si è verificato il tocco. Quella vista diventa la vista hit-test. (source)
Una soluzione è quella di creare il proprio UITapInSubviewsView
con la seguente definizione per hitTest
:
(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
NSEnumerator *reverseE = [self.subviews reverseObjectEnumerator];
UIView *iSubView;
while ((iSubView = [reverseE nextObject])) {
UIView *viewWasHit = [iSubView hitTest:[self convertPoint:point toView:iSubView] withEvent:event];
if(viewWasHit)
return viewWasHit;
}
return [super hitTest:point withEvent:event];
}
quindi si utilizza questa classe per la vostra vista padre.
(Ho trovato questo codice in un post di S.O. alcune settimane fa, ma non riesco a trovarlo più, quindi l'ho appena copiato dal mio progetto).
Puoi ampliare la risposta un po 'per la causa di ciò: è perché l'ignora di default che tocca ignora i limiti della vista genitore? E ho bisogno di testare me stesso se il tocco è in limiti del bambino? – Jaanus