Sobes.tech
Junior — Middle

Πώς μπορεί να προσδιοριστεί το ενεργό ViewController στο τρέχον πλαίσιο της εφαρμογής;

sobes.tech AI

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

Για να προσδιορίσετε τον ενεργό (τρέχοντα εμφανιζόμενο) ViewController σε μια εφαρμογή iOS, μπορείτε να διασχίσετε την ιεραρχία των ελεγκτών, ξεκινώντας από τον ριζικό ελεγκτή του παραθύρου.

Παράδειγμα μιας λειτουργίας σε Swift που επιστρέφει τον τρέχοντα ορατό ViewController:

func getVisibleViewController(_ rootViewController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
    if let nav = rootViewController as? UINavigationController {
        return getVisibleViewController(nav.visibleViewController)
    }
    if let tab = rootViewController as? UITabBarController {
        if let selected = tab.selectedViewController {
            return getVisibleViewController(selected)
        }
    }
    if let presented = rootViewController?.presentedViewController {
        return getVisibleViewController(presented)
    }
    return rootViewController
}

Αυτή η λειτουργία ελέγχει αναδρομικά:

  • Ελεγκτής πλοήγησης — επιστρέφει τον ορατό ελεγκτή στην στοίβα.
  • Ελεγκτής καρτέλας — επιστρέφει τον επιλεγμένο ελεγκτή.
  • Ελεγκτής που παρουσιάζεται με modal — τον επιστρέφει.

Τελικά, επιστρέφει ακριβώς τον ViewController που εμφανίζεται αυτήν τη στιγμή στον χρήστη.