Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : iOS, UIKit, rootViewController, UIWindow, UIApplication

Как вручную установить rootViewController в приложении?

Этот вопрос проверяет понимание жизненного цикла iOS-приложения и способность программно управлять корневым контроллером, что необходимо для динамической навигации или кастомных переходов.

Короткий ответ

rootViewController — это главный контроллер, который отображается в окне приложения. Обычно он устанавливается в Storyboard, но можно сделать это и в коде. Для этого нужно получить доступ к UIWindow (например, через window свойство SceneDelegate) и присвоить его rootViewController нужный UIViewController. Это позволяет динамически менять начальный экран приложения, например, в зависимости от авторизации пользователя.

Длинный ответ

В iOS-приложениях на UIKit rootViewController — это корневой контроллер представления, который управляет основным содержимым окна приложения (UIWindow). Установка этого контроллера вручную требуется, когда нужно отказаться от Storyboard, реализовать сложную логику запуска или динамически менять весь интерфейс приложения (например, переключаться между потоком авторизации и основным приложением).

Где и как устанавливается rootViewController

В современных приложениях (начиная с iOS 13) точка входа — это SceneDelegate. В методе scene(_:willConnectTo:options:) создается окно и устанавливается корневой контроллер.

// Пример в SceneDelegate.swift
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }
    
    // 1. Создаем окно
    window = UIWindow(windowScene: windowScene)
    
    // 2. Создаем и настраиваем корневой контроллер
    let rootVC = MainViewController() // Ваш кастомный контроллер
    let navigationController = UINavigationController(rootViewController: rootVC)
    
    // 3. Устанавливаем rootViewController для окна
    window?.rootViewController = navigationController
    
    // 4. Делаем окно ключевым и видимым
    window?.makeKeyAndVisible()
}

Динамическая смена rootViewController

Иногда требуется заменить корневой контроллер во время работы приложения (например, после успешного входа). Это делается с анимацией:

// Функция для перехода к основному экрану после авторизации
func switchToMainApp() {
    guard let window = UIApplication.shared.windows.first else { return }
    
    let mainVC = TabBarController() // Новый корневой контроллер
    
    // Опционально: добавляем анимацию перехода
    UIView.transition(with: window, duration: 0.3, options: .transitionCrossDissolve, animations: {
        window.rootViewController = mainVC
    }, completion: nil)
}

Такой подход часто используется в приложениях с раздельными потоками для авторизованных и неавторизованных пользователей, а также в приложениях без Storyboard (программная верстка).

Итог: Ручная установка rootViewController нужна для полного контроля над иерархией представлений в приложении, особенно при реализации сложной логики запуска, кастомных переходов между модулями или при отказе от Storyboard в пользу программного UI.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    4

Навыки

  • Swift

    Swift

  • IOS

    IOS

Ключевые слова

#iOS

#UIKit

#rootViewController

#UIWindow

#UIApplication

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.