Sobes.tech
Junior — Middle

Jak lze určit aktivní ViewController v aktuálním kontextu aplikace?

sobes.tech AI

Odpověď od AI

Chcete-li určit aktivní (aktuálně zobrazovaný) ViewController v aplikaci iOS, můžete projít hierarchii kontrolerů, počínaje kořenovým kontrolerem okna.

Příklad funkce v Swift, která vrací aktuálně viditelný 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
}

Tato funkce rekurzivně kontroluje:

  • Navigační kontroler — vrací viditelný kontroler na zásobníku.
  • TabBar kontroler — vrací vybraný kontroler.
  • Modalně prezentovaný kontroler — vrací jej.

Na konci vrací právě ten ViewController, který je právě nyní zobrazen uživateli.