Sobes.tech
Middle+

Dans quelles situations peut-on se retrouver dans un état où l'entrée utilisateur est désactivée (interaction utilisateur désactivée) et Vue ne peut pas gérer les événements tactiles?

sobes.tech IA

Réponse de l'IA

L'état user interaction enabled false au niveau de UIView dans iOS signifie que cette UIView et ses sous-vues ne peuvent pas recevoir d'événements tactiles.

Les situations où cela peut se produire et affecter le traitement des événements par des composants Vue intégrés, par exemple via WKWebView:

  • Superposition d'une vue transparente: Si une autre vue avec isUserInteractionEnabled = true est superposée à WKWebView et la couvre totalement ou partiellement, les événements tactiles seront interceptés par la vue supérieure et les composants Vue dans WKWebView ne les recevront pas.
  • Désactivation de l'interaction pour WKWebView: La propriété isUserInteractionEnabled de WKWebView est réglée sur false. Cela désactive complètement la gestion des touchers dans la vue web.
  • Désactivation de l'interaction pour la vue parente de WKWebView: Si WKWebView est une vue enfant d'un UIView et que ce UIView a isUserInteractionEnabled = false, alors toutes ses vues enfants, y compris WKWebView, ne recevront pas d'événements tactiles.
  • Vues modales ou contrôleurs d'alerte: L'affichage d'une vue modale (UIViewController.present) ou d'un contrôleur d'alerte système au-dessus de la vue principale contenant WKWebView intercepte tous les événements tactiles jusqu'à ce que la vue modale ou l'alerte soit fermée.
  • Animations: Pendant certaines animations, l'interaction avec la vue peut être temporairement désactivée pour éviter des actions indésirables de l'utilisateur durant l'animation.
  • Opérations en arrière-plan prolongées: Dans de vieilles architectures ou avec des implémentations incorrectes, lors de tâches en arrière-plan prolongées (par exemple, le chargement de données), l'interaction avec l'UI peut être incorrectement désactivée pour empêcher l'utilisateur d'agir jusqu'à la fin de l'opération.
  • Erreurs dans Auto Layout: Des configurations incorrectes d'Auto Layout peuvent faire en sorte que WKWebView soit invisible (taille 0, caché derrière une autre vue) ou que son cadre soit hors de l'écran, ce qui le rend effectivement inactif pour l'interaction utilisateur.

Dans le contexte de Vue fonctionnant à l'intérieur de WKWebView, toutes ces causes spécifiques à iOS peuvent faire en sorte que les événements touchstart, touchend, click, etc., nécessaires au fonctionnement des directives Vue (v-on:click, @tap dans Quasar/Ionic Vue) ou à la gestion directe des événements, ne parviennent tout simplement pas au code JavaScript dans WKWebView. Le débogage dans une telle situation nécessite de vérifier la hiérarchie des vues dans Xcode (ViewController Hierarchy Debugger) et l'état de la propriété isUserInteractionEnabled à différents niveaux.