Это всегда вызывается. Из документации ,
Контроллер представления вызывает этот метод, когда запрашивается его свойство представления, но в данный момент оно равно nil. Этот метод загружает или создает представление и назначает его свойству view.
Если у контроллера представления есть связанный файл пера, этот метод загружает представление из файла пера. Контроллер представления имеет связанный файл пера, если свойство nibName возвращает ненулевое значение, что происходит, если контроллер представления был создан из раскадровки, если вы явно назначили ему файл пера, используя метод init (nibName: bundle :), или если iOS находит файл пера в комплекте приложений с именем, основанным на имени класса контроллера представления. Если у контроллера представления нет связанного файла пера, этот метод вместо этого создает простой объект UIView.
...
Вы можете переопределить этот метод, чтобы создать свои взгляды вручную. Если вы решите сделать это, назначьте root представление вашей иерархии представлений свойству представления. Представления, которые вы создаете, должны быть уникальными экземплярами и не должны использоваться совместно с любым другим объектом контроллера представления. Ваша пользовательская реализация этого метода не должна вызывать super.
Он вызывается, даже если вы не переопределяете его. Как правило, вы можете переопределить его, только если вы не хотите создавать контроллер представления из его кончика. В этом методе вы бы присваивали self.view
некоторое значение (поскольку view
загружается лениво). Если вы не назначаете какой-то особый подкласс для своего свойства представления, вы обычно можете получить, добавив все свои логи c к viewDidLoad()
.
Вот пример реализации:
// Say you have some custom view you want use as your controller's view
class CustomView: UIView { ... }
...
// In your view controller, you can set that custom instance to your view property.
override func loadView() {
self.view = CustomView()
}
UITableViewController
, например, устанавливает UITableView
как ваше представление (предположительно) в этом методе.
По умолчанию вид - просто ванильный UIView. Если это все, что вам нужно, нет причин вызывать этот метод вообще. viewDidLoad()
по-прежнему идеально подходит для любой дополнительной инициализации.
Несколько моментов, которые следует запомнить:
- присваивается только вашему виду в
loadView()
. Не вызывайте его (с правой стороны; не вызывайте его геттер), потому что это может вызвать бесконечное l oop. Если view
равно нулю, для его создания вызывается loadView
. - Не звоните
super.loadView()
. Этот метод предназначен для присвоения вида свойству вида. Позвонив по телефону super, вы сделаете это дважды.
Немного больше информации о бесконечной ловушке l oop, в которую вы можете попасть:
Из представления UIViewController :
Если вы обращаетесь к этому свойству и его значение в настоящий момент равно nil, контроллер представления автоматически вызывает метод loadView () и возвращает получившееся представление.
view
создается и назначается в loadView()
когда ноль. Если вы сделаете это внутри самого loadView
, вы предложите вызвать loadView
в своем собственном теле.