Це для останніх версій 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було оновлено