Questo è per le ultime versioni di iOS (modificato con Xcode 9.3, Swift 4.1 ). Di seguito sono riportate tutte le fasi che rendono UIViewController
completo il ciclo di vita .
loadView()
loadViewIfNeeded()
viewDidLoad()
viewWillAppear(_ animated: Bool)
viewWillLayoutSubviews()
viewDidLayoutSubviews()
viewDidAppear(_ animated: Bool)
viewWillDisappear(_ animated: Bool)
viewDidDisappear(_ animated: Bool)
Lasciami spiegare tutte quelle fasi.
1. loadView
Questo evento crea / carica la vista gestita dal controller. Può caricare da un file pennino associato o vuoto UIView
se è stato trovato null. Questo lo rende un buon posto per creare le tue visualizzazioni in codice a livello di codice.
È qui che le sottoclassi dovrebbero creare la loro gerarchia di viste personalizzate se non usano un pennino. Non dovrebbe mai essere chiamato direttamente. Sostituisci questo metodo solo quando crei visualizzazioni a livello di view
codice e assegni la vista root alla proprietà Non chiamare il metodo super quando esegui l' override di
LoadView
2. loadViewIfNeeded
Se in caso la vista della corrente viewController
non è stata ancora impostata, questo metodo caricherà la vista ma ricorda, questo è disponibile solo in iOS> = 9.0. Quindi, se stai supportando iOS <9.0, non aspettarti che arrivi in figura.
Carica la vista del controller di visualizzazione se non è già stata impostata.
3. viewDidLoad
L' viewDidLoad
evento viene chiamato solo quando la vista viene creata e caricata in memoria ma i limiti per la vista non sono ancora definiti. Questo è un buon posto per inizializzare gli oggetti che il controller di visualizzazione utilizzerà.
Chiamato dopo che la vista è stata caricata. Per i controller di visualizzazione creati nel codice, questo è dopo -loadView. Per i controller di vista non archiviati da un pennino, ciò avviene dopo aver impostato la vista.
4. viewWillAppear
Questo evento avvisa viewController
ogni volta che la vista appare sullo schermo. In questo passaggio la vista ha limiti definiti ma l'orientamento non è impostato.
Chiamato quando la vista sta per essere resa visibile. L'impostazione predefinita non fa nulla.
5. viewWillLayoutSubviews
Questo è il primo passo nel ciclo di vita in cui i limiti sono finalizzati. Se non si utilizzano vincoli o layout automatico, è probabile che si desideri aggiornare qui le visualizzazioni secondarie. Questo è disponibile solo in iOS> = 5.0. Quindi, se stai supportando iOS <5.0, non aspettarti che entrerà in scena.
Chiamato poco prima che venga invocato il metodo layoutSubviews della vista del controller di visualizzazione. Le sottoclassi possono essere implementate secondo necessità. L'impostazione predefinita è no.
6. viewDidLayoutSubviews
Questo evento notifica al controller di visualizzazione che sono state impostate le visualizzazioni secondarie. È un buon posto per apportare modifiche alle visualizzazioni secondarie dopo che sono state impostate. Questo è disponibile solo in iOS> = 5.0. Quindi, se stai supportando iOS <5.0, non aspettarti che entrerà in scena.
Chiamato subito dopo il richiamo del metodo layoutSubviews della vista del controller di visualizzazione. Le sottoclassi possono essere implementate secondo necessità. L'impostazione predefinita è no.
7. viewDidAppear
L' viewDidAppear
evento si attiva dopo che la vista è stata visualizzata sullo schermo. Il che lo rende un buon posto per ottenere dati da un servizio o database di back-end.
Chiamato quando la vista è stata completamente trasferita sullo schermo. L'impostazione predefinita non fa nulla
8. viewWillDisappear
L' viewWillDisappear
evento si attiva quando la vista di presentazione viewController
sta per scomparire, respingere, coprire o nascondersi dietro l'altro viewController
. Questo è un buon posto dove puoi limitare le tue chiamate di rete, invalidare il timer o rilasciare oggetti che sono legati a questo viewController
.
Chiamato quando la vista viene ignorata, coperta o altrimenti nascosta.
9. viewDidDisappear
Questo è l'ultimo passaggio del ciclo di vita a cui chiunque può rivolgersi mentre questo evento si attiva subito dopo che la vista di presentazione viewController
è scomparsa, respinta, coperta o nascosta.
Chiamato dopo che la vista è stata respinta, coperta o altrimenti nascosta. L'impostazione predefinita non fa nulla
Ora come per Apple quando stai implementando questo metodo, dovresti ricordare di chiamare l' super
implementazione di quel metodo specifico.
Se si esegue la sottoclasse di UIViewController, è necessario chiamare la super implementazione di questo metodo, anche se non si utilizza un NIB. (Per comodità, il metodo init predefinito lo farà per te e specificherà zero per entrambi gli argomenti di questo metodo.) Nella NIB specificata, il proxy Proprietario del file dovrebbe avere la sua classe impostata sulla sottoclasse del controller di visualizzazione, con il punto di vista view collegato alla vista principale. Se invochi questo metodo con un nome nib nib, il -loadView
metodo di questa classe tenterà di caricare un NIB il cui nome è lo stesso della classe del controller di visualizzazione. Se in realtà non esiste un NIB di questo tipo, è necessario chiamare -setView:
prima che -view
sia invocato o sostituire il -loadView
metodo per impostare le visualizzazioni in modo programmatico.
Spero che questo abbia aiutato. Grazie.
UPDATE - Come @ThomasW indicato all'interno commento viewWillLayoutSubviews
e viewDidLayoutSubviews
sarà anche chiamato in altri momenti in cui subviews di vista principale vengono caricati, ad esempio quando le cellule di una vista tabella o vista raccolta vengono caricati.
AGGIORNAMENTO - Come indicato da @Maria all'interno del commento, la descrizione di è loadView
stata aggiornata