В каком методе UIViewController можно программно создать его корневое view?

«В каком методе UIViewController можно программно создать его корневое view?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Корневое view контроллера можно создать, переопределив метод loadView().

Назначение: Система вызывает этот метод, когда требуется создать view-иерархию контроллера. Если метод не переопределен, iOS загружает view из storyboard или nib-файла.

Пример создания view вручную:

class CustomViewController: UIViewController {
    override func loadView() {
        // 1. Создаем кастомное view
        let customView = UIView()
        customView.backgroundColor = .systemBackground

        // 2. Добавляем subviews
        let label = UILabel()
        label.text = "Hello, World!"
        customView.addSubview(label)
        // ... настройка constraints

        // 3. КРИТИЧЕСКИ ВАЖНО: присвоить self.view
        self.view = customView
    }

    // viewDidLoad() будет вызван после loadView()
    override func viewDidLoad() {
        super.viewDidLoad()
        // Дополнительная настройка уже созданного view
    }
}

Ключевые правила:

  • Не вызывайте super.loadView(), если создаете view полностью самостоятельно.
  • Обязательно присвойте свойство self.view, иначе произойдет crash.
  • Метод loadView() вызывается один раз за жизненный цикл контроллера, до viewDidLoad().
  • Используйте этот метод, когда view создается исключительно кодом, без Interface Builder.