Sobes.tech
Middle+

U kojim situacijama može doći do stanja kada je unos korisnika onemogućen (korisnička interakcija je false) i Vue ne može da obradi događaje dodira?

sobes.tech АИ

Одговор од АИ

Stanje user interaction enabled false na nivou UIView u iOS znači da taj UIView i njegovi podređeni elementi ne mogu primati događaje dodira.

Situacije kada se to može dogoditi i uticati na obradu događaja od strane Vue komponenti, na primer, ugrađenih putem WKWebView:

  • Prekrivanje prozirnim prikazom: Ako je nad WKWebView postavljen drugi prikaz sa isUserInteractionEnabled = true i on potpuno ili delimično prekriva oblast WKWebView, događaji dodira će biti uhvaćeni od strane gornjeg prikaza i Vue komponente u WKWebView ih neće dobiti.
  • Onemogućavanje interakcije za WKWebView: Svojstvo isUserInteractionEnabled samog WKWebView je postavljeno na false. To potpuno onemogućava obradu dodira unutar veb prikaza.
  • Onemogućavanje interakcije za roditeljski prikaz WKWebView: Ako je WKWebView podređeni prikaz nekog UIView, i taj roditeljski UIView ima isUserInteractionEnabled = false, tada svi njegovi podređeni prikazi, uključujući WKWebView, takođe neće primati događaje dodira.
  • Modularni prikazi ili alert kontroleri: Prikaz modualnog prikaza (UIViewController.present) ili sistemskog alert kontrolera iznad glavnog prikaza koji sadrži WKWebView presreće sve događaje dodira dok se modualni prikaz ili alert ne zatvore.
  • Animacije: Tokom nekih animacija može privremeno biti onemogućena interakcija sa prikazom kako bi se sprečile neželjene radnje korisnika tokom animacije.
  • Dugotrajne pozadinske operacije: U starijim arhitekturama ili pri pogrešnoj implementaciji, tokom izvršavanja dugotrajne pozadinske zadatka (npr. učitavanje podataka) može biti grešno onemogućena interakcija sa UI-jem kako bi se sprečile radnje korisnika do završetka operacije.
  • Greške u Auto Layout-u: Neispravne postavke Auto Layout-a mogu dovesti do toga da WKWebView bude nevidljiv (veličine 0, sakriven iza drugog prikaza) ili da mu okvir bude van ekrana, što ga čini neaktivnim za interakciju korisnika.

U kontekstu Vue, koji radi unutar WKWebView, svi ovi iOS-specifični razlozi mogu dovesti do toga da događaji touchstart, touchend, click i slično, koji su potrebni za rad Vue-direktiva (v-on:click, @tap u Quasar/Ionic Vue) ili za obradu događaja direktno, jednostavno ne stignu do JavaScript koda u WKWebView. Otklanjanje grešaka u takvoj situaciji zahteva proveru hijerarhije prikaza u Xcode (ViewController Hierarchy Debugger) i stanja svojstva isUserInteractionEnabled na različitim nivoima.