← Назад к вопросам

Что такое makeKeyAndVisible?

1.0 Junior🔥 191 комментариев
#UIKit и верстка

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое makeKeyAndVisible?

makeKeyAndVisible — это метод экземпляра класса UIWindow в iOS, который выполняет две ключевые задачи: делает окно главным (key) и видимым (visible) в иерархии окон приложения. Этот метод традиционно используется в AppDelegate (или SceneDelegate в iOS 13+) при запуске приложения для отображения начального интерфейса.

Ключевые функции метода

  1. Делает окно «главным» (key):

    • Key window — это окно, которое в данный момент получает пользовательский ввод (касания, жесты, действия клавиатуры и т.д.). В iOS обычно только одно окно может быть «ключевым» в каждый момент времени.
    • Метод makeKey устанавливает свойство isKeyWindow окна в true, активируя его для взаимодействия с пользователем.
  2. Делает окно видимым (visible):

    • Метод makeVisible (неявно вызываемый) устанавливает свойство isHidden окна в false, выводя его на экран.
    • Окно становится частью иерархии окон приложения и начинает отображать свое содержимое.

Типичный сценарий использования

В традиционном (до iOS 13) AppDelegate при запуске приложения создается главное окно и устанавливается корневой контроллер:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 1. Создаем объект окна с размерами экрана
        window = UIWindow(frame: UIScreen.main.bounds)
        
        // 2. Создаем и настраиваем корневой контроллер
        let viewController = MainViewController()
        let navigationController = UINavigationController(rootViewController: viewController)
        
        // 3. Устанавливаем контроллер как корневой для окна
        window?.rootViewController = navigationController
        
        // 4. Делаем окно главным и видимым
        window?.makeKeyAndVisible()
        
        return true
    }
}

Важные аспекты работы метода

Последовательность операций:

// Метод makeKeyAndVisible внутренне выполняет примерно следующее:
window.isHidden = false    // Делает окно видимым
window.makeKey()           // Устанавливает окно как главное

Влияние на иерархию окон:

  • При вызове makeKeyAndVisible система автоматически помещает окно поверх других окон приложения.
  • Если ранее существовало другое key window, оно теряет этот статус.

Отличие от отдельных методов:

  • makeKey() — только устанавливает окно как главное, но не гарантирует его видимость.
  • Простое присвоение isHidden = false — делает окно видимым, но не обязательно главным.

Современный контекст (iOS 13+)

С появлением SceneDelegate и поддержкой многозадачности на iPad, использование makeKeyAndVisible несколько изменилось:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?
    
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        
        // Окно теперь создается с привязкой к конкретной сцене
        window = UIWindow(windowScene: windowScene)
        window?.rootViewController = MainTabBarController()
        window?.makeKeyAndVisible()
    }
}

Особенности и ограничения

  • Одноразовость вызова: Обычно метод вызывается только один раз для главного окна при запуске приложения.
  • Не требуется для UIWindow(rootViewController:): Конструктор UIWindow(rootViewController:) автоматически устанавливает контроллер как корневой, но все равно требует вызова makeKeyAndVisible для отображения.
  • Взаимодействие с другими окнами: В сложных сценариях (например, кастомные алерты, всплывающие окна) может потребоваться создание дополнительных окон и управление их видимостью.

Практический пример с анимацией

// Плавное появление окна с анимацией
UIView.animate(withDuration: 0.3) {
    self.window?.alpha = 0
    self.window?.makeKeyAndVisible()
    self.window?.alpha = 1
}

Важно: makeKeyAndVisible — фундаментальный метод для инициализации пользовательского интерфейса в iOS-приложениях. Он обеспечивает корректное отображение контента и готовность окна к взаимодействию с пользователем, устанавливая необходимые связи между системой ввода, окном и его содержимым.

Что такое makeKeyAndVisible? | PrepBro