Sobes.tech
Junior — Middle

Hogyan lehet meghatározni az aktív ViewController-t az alkalmazás aktuális kontextusában?

sobes.tech MI

Válasz az MI-től

Az iOS alkalmazásban az aktív (jelenleg megjelenő) ViewController meghatározásához végig lehet járni a kontrollerek hierarchiáját, kezdve az ablak gyökér kontrollerénél.

Példa egy Swift függvényre, amely visszaadja a jelenlegi látható ViewControllert:

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
}

Ez a függvény rekurzívan ellenőrzi:

  • Navigációs kontrollert — visszaadja a látható kontrollert a veremből.
  • TabBar kontrollert — visszaadja a kiválasztott kontrollert.
  • Modalisan bemutatott kontrollert — visszaadja azt.

Végül pontosan azt a ViewControllert adja vissza, amelyet jelenleg a felhasználó lát.