Lorsque la vue parent a userInteractionEnabled = NO, ses sous-vues n'acceptent pas les événements tactiles, même si leur propriété userInteractionEnabled est définie sur YES.
Est-il possible d’obtenir des événements tactiles dans les sous-vues?
Pour que la vue laisse passer les contacts, mais que ses sous-vues soient gérées, laissez userInteractionEnabled sur cette vue sur YES et utilisez plutôt cet extrait:
-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
id hitView = [super hitTest:point withEvent:event];
if (hitView == self) return nil;
else return hitView;
}
Source: http://cocoaheads.tumblr.com/post/2130871776/ignore-touches-to-uiview-subclass-but-not-to-its
La définition de la propriété userInteractionEnabled de la vue parent sur NO définit également implicitement ses propriétés userInteractionEnabled de sous-vues sur NO. Je ne connais pas de moyen d'obtenir des événements tactiles dans la sous-vue à l'aide de l'approche que vous avez décrite, mais vous pouvez peut-être créer une vue qui recouvre simplement les vues avec lesquelles vous souhaitez que les utilisateurs interagissent, mais qui n'est pas le parent de celles vues.
Solution rapide - Vous devez avoir une classe de vue personnalisée pour la vue parent et y ajouter le code suivant. Laissez les interactions utilisateur de la vue parent activées.
J'espère que le code suivant vous aidera.
class MyCustomParentView: 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
}
}
}