Sobes.tech
Back to questions
Junior — Middle
72

Каким образом можно определить активный ViewController в текущем контексте приложения?

Answer from AI

sobes.tech 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
}

Эта функция рекурсивно проверяет:

  • Навигационный контроллер — возвращает видимый контроллер стека.
  • Таббар контроллер — возвращает выбранный контроллер.
  • Модально представленный контроллер — возвращает его.

В итоге возвращается именно тот ViewController, который сейчас отображается пользователю.