Sobes.tech
Junior — Middle

Jak można określić aktywny ViewController w bieżącym kontekście aplikacji?

sobes.tech AI

Odpowiedź od AI

Aby określić aktywny (obecnie wyświetlany) ViewController w aplikacji iOS, można przejść przez hierarchię kontrolerów, zaczynając od kontrolera głównego okna.

Przykład funkcji w Swift, która zwraca aktualnie widoczny 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
}

Funkcja ta rekurencyjnie sprawdza:

  • Kontroler nawigacji — zwraca widoczny kontroler na stosie.
  • Kontroler zakładek — zwraca wybrany kontroler.
  • Kontroler prezentowany modalnie — zwraca go.

Ostatecznie zwraca dokładnie ten ViewController, który jest aktualnie wyświetlany użytkownikowi.