Sobes.tech
Middle+

V jakých situacích může dojít ke stavu, kdy je uživatelský vstup zakázán (uživatelská interakce nastavena na false) a Vue nem může zpracovat události dotyku?

sobes.tech AI

Odpověď od AI

Stav user interaction enabled false na úrovni UIView v iOS znamená, že daný UIView a jeho podřízené prvky nemohou přijímat události dotyku.

Situace, kdy k tomu může dojít a ovlivnit zpracování událostí Vue komponentami, například vloženými přes WKWebView:

  • Překrytí průhledným prvkem: Pokud je nad WKWebView umístěn jiný prvek s isUserInteractionEnabled = true a úplně nebo částečně překrývá oblast WKWebView, budou události dotyku zachyceny horním prvkem a Vue komponenty v WKWebView je nedostanou.
  • Vypnutí interakce pro WKWebView: Vlastnost isUserInteractionEnabled samotného WKWebView je nastavena na false. To úplně vypíná zpracování dotyků uvnitř webového zobrazení.
  • Vypnutí interakce pro rodičovské zobrazení WKWebView: Pokud je WKWebView podřízeným prvkem nějakého UIView, a tento rodičovský UIView má nastaveno isUserInteractionEnabled = false, pak všechny jeho podřízené prvky, včetně WKWebView, také nebudou přijímat události dotyku.
  • Modální zobrazení nebo alertové kontrolery: Zobrazení modálního zobrazení (UIViewController.present) nebo systémového alertového kontroleru nad hlavním zobrazením obsahujícím WKWebView zachytí všechny události dotyku, dokud modální zobrazení nebo alert nebude zavřen.
  • Animace: Během některých animací může být dočasně vypnuta interakce s prvkem, aby se zabránilo nežádoucím akcím uživatele během animace.
  • Dlouhotrvající pozadí operace: Ve starších architekturách nebo při nesprávné implementaci může být během provádění dlouhotrvající pozadí úlohy (například načítání dat) chybně vypnuta interakce s UI, aby se zabránilo akcím uživatele do dokončení operace.
  • Chyby v Auto Layout: Nesprávné nastavení Auto Layout může vést k tomu, že WKWebView bude neviditelný (velikost 0, skrytý za jiným prvkem) nebo jeho rámec bude mimo obrazovku, což ho fakticky činí neaktivním pro interakci uživatele.

V kontextu Vue, pracujícího uvnitř WKWebView, všechny tyto iOS-specifické důvody mohou vést k tomu, že události touchstart, touchend, click atd., které jsou nezbytné pro fungování Vue-direktiv (v-on:click, @tap v Quasar/Ionic Vue) nebo zpracování událostí přímo, jednoduše nedorazí do JavaScriptového kódu v WKWebView. Debugging v takové situaci vyžaduje kontrolu hierarchie zobrazení v Xcode (ViewController Hierarchy Debugger) a stavu vlastnosti isUserInteractionEnabled na různých úrovních.