Это для последних версий iOS (изменено с помощью Xcode 9.3, Swift 4.1 ). Ниже приведены все этапы, которые делают жизненный цикл UIViewController
полным.
loadView()
loadViewIfNeeded()
viewDidLoad()
viewWillAppear(_ animated: Bool)
viewWillLayoutSubviews()
viewDidLayoutSubviews()
viewDidAppear(_ animated: Bool)
viewWillDisappear(_ animated: Bool)
viewDidDisappear(_ animated: Bool)
Позвольте мне объяснить все эти этапы.
1. loadView
Это событие создает / загружает представление, которым управляет контроллер. Он может загружаться из связанного файла пера или пустого файла, UIView
если был найден ноль. Это делает его хорошим местом для программного создания ваших представлений в коде.
Здесь подклассы должны создавать свою собственную иерархию представлений, если они не используют перо. Никогда не должен вызываться напрямую. Переопределяйте этот метод только при программном создании представлений и назначении корневого представления view
свойству. Не вызывайте супер-метод при переопределении
loadView.
2. loadViewIfNeeded
Если incase представление current viewController
еще не было установлено, тогда этот метод загрузит представление, но помните, это доступно только в iOS> = 9.0. Так что, если вы поддерживаете iOS <9.0, то не ожидайте, что она войдет в картину.
Загружает представление контроллера представления, если оно еще не было установлено.
3. viewDidLoad
viewDidLoad
Событие вызывается только тогда , когда вид создается и загружается в память , но границы для представления еще не определены. Это хорошее место для инициализации объектов, которые будет использовать контроллер представления.
Вызывается после того, как представление было загружено. Для контроллеров представления, созданных в коде, это после -loadView. Для контроллеров представления, разархивированных с пера, это после того, как представление установлено.
4. viewWillAppear
Это событие уведомляет viewController
всякий раз, когда представление появляется на экране. На этом шаге у представления есть границы, которые определены, но ориентация не установлена.
Вызывается, когда представление собирается сделать видимым. По умолчанию ничего не делает.
5. viewWillLayoutSubviews
Это первый шаг в жизненном цикле, когда границы завершаются. Если вы не используете ограничения или Auto Layout, вы, вероятно, захотите обновить подпредставления здесь. Это доступно только в iOS> = 5.0. Так что, если вы поддерживаете iOS <5.0, то не ожидайте, что она войдет в картину.
Вызывается непосредственно перед вызовом метода layoutSubviews представления контроллера представления. Подклассы могут реализовывать по мере необходимости. По умолчанию используется nop.
6. viewDidLayoutSubviews
Это событие уведомляет контроллер представления о том, что подпредставления были настроены. Это хорошее место для внесения любых изменений в подпредставления после их установки. Это доступно только в iOS> = 5.0. Так что, если вы поддерживаете iOS <5.0, то не ожидайте, что она войдет в картину.
Вызывается сразу после вызова метода layoutSubviews представления контроллера представления. Подклассы могут реализовывать по мере необходимости. По умолчанию используется nop.
7. viewDidAppear
На viewDidAppear
событие срабатывает после представления представлен на экране. Что делает его хорошим местом для получения данных из бэкэнд-сервиса или базы данных.
Вызывается, когда вид полностью перешел на экран. По умолчанию ничего не делает
8. viewWillDisappear
В viewWillDisappear
событие срабатывает , когда вид представлен viewController
вот - вот исчезнет, увольте, крышку или спрятаться за другой viewController
. Это хорошее место, где вы можете ограничить свои сетевые вызовы, сделать недействительным таймер или освободить объекты, которые связаны с этим viewController
.
Вызывается, когда вид закрывается, скрывается или иным образом скрывается.
9. viewDidDisappear
Это последний шаг жизненного цикла, к которому любой может обратиться, поскольку это событие происходит сразу после того, как представление представленного объекта viewController
исчезло, было отклонено, скрыто или скрыто.
Вызывается после того, как представление было закрыто, скрыто или иным образом скрыто. По умолчанию ничего не делает
Теперь, согласно Apple, когда вы реализуете эти методы, вы должны помнить, чтобы вызывать super
реализацию этого конкретного метода.
Если вы подкласс UIViewController, вы должны вызвать супер реализацию этого метода, даже если вы не используете NIB. (Для удобства метод init по умолчанию сделает это за вас, и для обоих аргументов этого метода будет указано значение nil.) В указанном NIB прокси-серверу владельца файла должен быть установлен класс для вашего подкласса контроллера представления с выходом представления подключен к основному виду. Если вы вызываете этот метод с именем nil nib, -loadView
метод этого класса попытается загрузить NIB, имя которого совпадает с классом вашего контроллера представления. Если такого NIB на самом деле не существует, вы должны либо вызвать его -setView:
до -view
вызова, либо переопределить -loadView
метод для программной настройки ваших представлений.
Надеюсь, это помогло. Спасибо.
ОБНОВЛЕНИЕ - Как @ThomasW указал внутри комментария, так viewWillLayoutSubviews
и viewDidLayoutSubviews
будет вызываться в другое время, когда загружаются подпредставления основного представления, например, когда загружаются ячейки табличного представления или представления коллекции.
ОБНОВЛЕНИЕ - Как @Maria указал внутри комментария, описание loadView
было обновлено