Sobes.tech
Middle+

Em que situações pode surgir um estado em que a entrada do utilizador está desativada (interação do utilizador desativada) e o Vue não consegue processar eventos de toque?

sobes.tech IA

Resposta da IA

O estado user interaction enabled false ao nível de UIView no iOS significa que este UIView e as suas subvisualizações não podem receber eventos de toque.

Situações em que isso pode ocorrer e afetar o processamento de eventos por componentes Vue integrados, por exemplo, através de WKWebView:

  • Sobreposição de vista transparente: Se uma outra vista com isUserInteractionEnabled = true estiver sobreposta ao WKWebView e a cobrir total ou parcialmente, os eventos de toque serão interceptados pela vista superior e os componentes Vue no WKWebView não os receberão.
  • Desativação da interação no WKWebView: A propriedade isUserInteractionEnabled do próprio WKWebView está definida como false. Isto desativa completamente o tratamento de toques dentro da vista web.
  • Desativação da interação na vista pai do WKWebView: Se o WKWebView for uma vista filha de um UIView e este UIView tiver isUserInteractionEnabled = false, então todas as suas vistas filhas, incluindo o WKWebView, também não receberão eventos de toque.
  • Vistas modais ou controladores de alerta: A exibição de uma vista modal (UIViewController.present) ou de um controlador de alerta do sistema sobre a vista principal que contém o WKWebView intercepta todos os eventos de toque até que a vista modal ou o alerta sejam fechados.
  • Animações: Durante algumas animações, a interação com a vista pode ser temporariamente desativada para evitar ações indesejadas do utilizador durante a animação.
  • Operações em segundo plano prolongadas: Em arquiteturas antigas ou com implementações incorretas, durante tarefas em segundo plano prolongadas (como carregamento de dados), a interação com a UI pode ser incorretamente desativada para impedir ações do utilizador até que a operação termine.
  • Erros no Auto Layout: Configurações incorretas de Auto Layout podem fazer com que o WKWebView seja invisível (tamanho 0, escondido atrás de outra vista) ou que o seu frame esteja fora da tela, o que na prática o torna inativo para a interação do utilizador.

No contexto do Vue, que funciona dentro do WKWebView, todas essas causas específicas do iOS podem fazer com que os eventos touchstart, touchend, click, etc., necessários para o funcionamento das diretivas Vue (v-on:click, @tap no Quasar/Ionic Vue) ou para o tratamento direto de eventos, simplesmente não cheguem ao código JavaScript no WKWebView. A depuração nesta situação requer verificar a hierarquia de vistas no Xcode (ViewController Hierarchy Debugger) e o estado da propriedade isUserInteractionEnabled em diferentes níveis.