Це для останніх версій 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
Ця подія створює / завантажує представлення, яким керує контролер. Він може завантажуватися із пов'язаного файлу nib або порожнього, UIView
якщо нуль знайдено. Це робить його гарним місцем для створення ваших поглядів у коді програмно.
Тут підкласи повинні створювати власну ієрархію подання, якщо вони не використовують нитку. Ніколи не слід телефонувати безпосередньо. Тільки перевизначити цей метод , коли ви програмно створити уявлення і призначити вид кореня до view
власності не називати супер метод , коли ви перевизначити
loadView
2. loadViewIfNeeded
Якщо обкладинка поточного перегляду viewController
ще не встановлена, цей метод завантажить подання, але пам’ятайте, що це доступно лише в iOS> = 9.0. Тож якщо ви підтримуєте iOS <9.0, тоді не сподівайтеся, що він з’явиться у зображенні.
Завантажує подання контролера перегляду, якщо воно ще не встановлено.
3. viewDidLoad
viewDidLoad
Подія викликається тільки тоді , коли вид створюється і завантажується в пам'ять , але кордону для подання ще не визначені. Це гарне місце для ініціалізації об'єктів, які збирається використовувати контролер перегляду.
Викликається після завантаження перегляду. Для контролерів перегляду, створених у коді, це після -loadView. Для контролерів перегляду, не дозволених від ручки, це відбувається після встановлення подання.
4. viewWillAppear
Ця подія сповіщає viewController
кожного разу, коли подання відображається на екрані. На цьому етапі подання має межі, які визначені, але орієнтація не встановлена.
Викликається, коли подання стане видимим. За замовчуванням нічого не робить.
5. viewWillLayoutSubviews
Це перший крок у життєвому циклі, де межі доопрацьовуються. Якщо ви не використовуєте обмежень або автоматичного макета, ви, ймовірно, хочете оновити тут підперегляди. Це доступно лише в iOS> = 5.0. Тож якщо ви підтримуєте iOS <5.0, то не сподівайтесь, що він відобразиться.
Викликається безпосередньо перед тим, як викликається макет подання диспетчера перегляду. Підкласи можуть реалізовуватись за необхідності. За замовчуванням - nop.
6. viewDidLayoutSubviews
Ця подія сповіщає контролер перегляду, що підгляди були налаштовані. Це гарне місце, щоб внести будь-які зміни в підперегляди після їх встановлення. Це доступно лише в iOS> = 5.0. Тож якщо ви підтримуєте iOS <5.0, то не сподівайтесь, що він відобразиться.
Викликається одразу після виклику методу компонування виду контролера перегляду. Підкласи можуть реалізовуватись за необхідності. За замовчуванням - nop.
7. viewDidAppear
На viewDidAppear
подію спрацьовує після подання представлений на екрані. Що робить його гарним місцем для отримання даних із сервісу резервної копії чи бази даних.
Викликається, коли погляд повністю переведений на екран. За замовчуванням нічого не робить
8. viewWillDisappear
У viewWillDisappear
подія спрацьовує , коли вид представлений viewController
ось - ось зникне, вибачте, кришку або сховатися за одною viewController
. Це хороше місце, де ви можете обмежувати мережеві дзвінки, недійсним таймером або випускати об'єкти, які пов'язані з цим viewController
.
Викликається, коли подання відхилено, прикрито або приховано іншим чином.
9. viewDidDisappear
Це останній крок життєвого циклу, до якого може звернутися будь-хто, коли ця подія стартує одразу після того, як вигляд представлених viewController
зник, звільнений, охоплений або прихований.
Викликається після відхилення, закриття чи приховання іншим способом. За замовчуванням нічого не робить
Тепер, як в Apple, коли ви реалізуєте цей метод, ви повинні пам'ятати, щоб викликати super
реалізацію цього конкретного методу.
Якщо ви підклас UIViewController, ви повинні викликати суперреалізацію цього методу, навіть якщо ви не використовуєте NIB. (Для зручності метод init за замовчуванням зробить це для вас і вкажіть нуль для обох аргументів цього методу.) У вказаному NIB проксі-власнику файлу повинен бути встановлений клас для підкласу контролера перегляду, з розеткою перегляду підключено до головного виду. Якщо ви посилаєтесь на цей метод з ім'ям nil nib, то -loadView
метод цього класу намагатиметься завантажити NIB, ім'я якого збігається з класом вашого контролера перегляду. Якщо такого NIB насправді не існує, вам потрібно або зателефонувати, -setView:
перш ніж -view
викликати його, або замінити -loadView
метод програмного налаштування своїх поглядів.
Сподіваюся, що це допомогло. Дякую.
ОНОВЛЕННЯ - Як @ThomasW вказував всередині коментаря, viewWillLayoutSubviews
а viewDidLayoutSubviews
також буде викликатися в інші часи, коли завантажуються підгляди основного виду, наприклад, коли завантажуються комірки подання таблиці або виду колекції.
ОНОВЛЕННЯ - Як @Maria вказав у коментарі, опис loadView
було оновлено