Ответ
UIWindow — это корневой контейнер, наследник UIView, который управляет отображением иерархии представлений (UIView) на экране и диспетчеризацией событий.
Основные обязанности:
- Корневой контейнер для View Hierarchy: Содержит все видимые
UIViewвашего приложения. - Связь с
UIViewController: Через свойствоrootViewControllerназначает контроллер, чье view становится корневым для окна. - Диспетчер событий: Получает системные события (касания, движения устройства) и направляет их в соответствующее view (
hit-testing). - Управление уровнями окон (
windowLevel): Позволяет отображать несколько окон (например, поверх системного статус-бара).
Базовый пример создания (AppDelegate):
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 1. Создаем окно на весь экран
window = UIWindow(frame: UIScreen.main.bounds)
// 2. Назначаем корневой ViewController
window?.rootViewController = MainTabBarController()
// 3. Делаем окно видимым и ключевым
window?.makeKeyAndVisible()
return true
}
Важные нюансы:
keyWindow: Главное окно, получающее ввод с клавиатуры и не связанные с touches события. ОпределяетсяmakeKeyAndVisible().- iOS 13+ и
UIScene: В приложениях с поддержкой сцен каждое окно (UIWindow) принадлежит конкретной сцене (UIScene). Управление жизненным циклом окна переносится вUISceneDelegate. - Не для UI: Обычно вы не работаете с
UIWindowнапрямую для построения интерфейса. Его основная роль — быть контейнером дляrootViewController.view.