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.