Ответ
loadView() — правильное место для кастомной инициализации view контроллера.
Пример реализации:
class CustomViewController: UIViewController {
override func loadView() {
// Создаем кастомную view
let customView = CustomView()
customView.backgroundColor = .systemBackground
customView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
// Устанавливаем как основную view контроллера
self.view = customView
}
}
Важные нюансы:
- Не вызывайте
super.loadView()если полностью заменяете view:// Правильно: override func loadView() { self.view = CustomView() }
// Неправильно: override func loadView() { super.loadView() // Создает стандартную UIView self.view = CustomView() // Лишняя работа }
2. **Проверка после установки:**
```swift
override func loadView() {
let customView = CustomView()
self.view = customView
assert(self.view != nil, "View must not be nil after loadView")
}
-
Когда НЕ переопределять
loadView():- Для контроллеров из Storyboard/XIB
- Когда используется
init(nibName:bundle:)с существующим nib-файлом
-
Альтернативный подход — установка в
viewDidLoad()(менее предпочтительно):// Работает, но view уже создана системой override func viewDidLoad() { super.viewDidLoad() let customView = CustomView(frame: self.view.bounds) self.view = customView // Замена существующей view }
Порядок вызова методов:
init()→ 2.loadView()→ 3.viewDidLoad()→ 4.viewWillAppear()