Sobes.tech
Middle+

Σε ποιες καταστάσεις μπορεί να προκύψει μια κατάσταση όπου η εισαγωγή χρήστη είναι απενεργοποιημένη (η αλληλεπίδραση χρήστη είναι ψευδής) και το Vue δεν μπορεί να χειριστεί γεγονότα αφής;

sobes.tech AI

Απάντηση από AI

Η κατάσταση user interaction enabled false σε επίπεδο UIView στο iOS σημαίνει ότι το συγκεκριμένο UIView και οι υπο-προβολές του δεν μπορούν να λαμβάνουν γεγονότα αφής.

Οι καταστάσεις όπου αυτό μπορεί να συμβεί και να επηρεάσει την επεξεργασία γεγονότων από ενσωματωμένα συστατικά Vue, για παράδειγμα μέσω WKWebView:

  • Επικάλυψη διαφανής προβολής: Αν πάνω από το WKWebView υπάρχει μια άλλη προβολή με isUserInteractionEnabled = true και καλύπτει πλήρως ή μερικώς την περιοχή του WKWebView, τα γεγονότα αφής θα πιαστούν από την ανώτερη προβολή και τα συστατικά Vue μέσα στο WKWebView δεν θα τα λάβουν.
  • Απενεργοποίηση αλληλεπίδρασης για το WKWebView: Η ιδιότητα isUserInteractionEnabled του ίδιου του WKWebView έχει οριστεί σε false. Αυτό απενεργοποιεί εντελώς τη διαχείριση των αφής εντός της προβολής ιστού.
  • Απενεργοποίηση αλληλεπίδρασης για την γονική προβολή του WKWebView: Αν το WKWebView είναι παιδική προβολή ενός UIView και αυτό το UIView έχει isUserInteractionEnabled = false, τότε όλες οι υπο-προβολές του, συμπεριλαμβανομένου του WKWebView, δεν θα λαμβάνουν γεγονότα αφής.
  • Μονόπλευρες προβολές ή ελεγκτές ειδοποιήσεων: Η εμφάνιση μιας μονής προβολής (UIViewController.present) ή ενός συστήματος ελεγκτή ειδοποιήσεων πάνω από την κύρια προβολή που περιέχει το WKWebView, πιάνονται όλα τα γεγονότα αφής μέχρι να κλείσει η μονή προβολή ή ο ελεγκτής ειδοποιήσεων.
  • Κινήσεις: Κατά τη διάρκεια ορισμένων κινήσεων, η αλληλεπίδραση με την προβολή μπορεί να απενεργοποιηθεί προσωρινά για την αποτροπή ανεπιθύμητων ενεργειών του χρήστη κατά τη διάρκεια της κίνησης.
  • Μακροχρόνιες λειτουργίες στο παρασκήνιο: Σε παλιότερες αρχιτεκτονικές ή με λανθασμένη υλοποίηση, κατά την εκτέλεση μακροχρόνιων εργασιών στο παρασκήνιο (π.χ. φόρτωση δεδομένων), μπορεί να απενεργοποιηθεί εσφαλμένα η αλληλεπίδραση με το UI για την αποτροπή ενεργειών του χρήστη μέχρι την ολοκλήρωση της λειτουργίας.
  • Σφάλματα στο Auto Layout: Λανθασμένες ρυθμίσεις Auto Layout μπορεί να οδηγήσουν στο να είναι το WKWebView αόρατο (μέγεθος 0, κρυμμένο πίσω από άλλη προβολή) ή το πλαίσιο του να βρίσκεται εκτός οθόνης, καθιστώντας το ουσιαστικά ανενεργό για την αλληλεπίδραση χρήστη.

Στο πλαίσιο του Vue, που λειτουργεί μέσα στο WKWebView, όλες αυτές οι iOS-ειδικές αιτίες μπορούν να οδηγήσουν στο γεγονός ότι τα γεγονότα touchstart, touchend, click κ.λπ., που είναι απαραίτητα για τη λειτουργία των Vue-directives (v-on:click, @tap στο Quasar/Ionic Vue) ή για την άμεση επεξεργασία γεγονότων, απλώς δεν φτάνουν στον κώδικα JavaScript στο WKWebView. Ο αποσφαλμάτωση σε μια τέτοια κατάσταση απαιτεί τον έλεγχο της ιεραρχίας των προβολών στο Xcode (ViewController Hierarchy Debugger) και την κατάσταση της ιδιότητας isUserInteractionEnabled σε διάφορα επίπεδα.