Dies gilt für die neuesten iOS-Versionen (geändert mit Xcode 9.3, Swift 4.1 ). Nachfolgend sind alle Phasen aufgeführt, die den Lebenszyklus eines UIViewController
vollständigen Lebenszyklus ausmachen .
loadView()
loadViewIfNeeded()
viewDidLoad()
viewWillAppear(_ animated: Bool)
viewWillLayoutSubviews()
viewDidLayoutSubviews()
viewDidAppear(_ animated: Bool)
viewWillDisappear(_ animated: Bool)
viewDidDisappear(_ animated: Bool)
Lassen Sie mich all diese Phasen erklären.
1. loadView
Dieses Ereignis erstellt / lädt die Ansicht, die der Controller verwaltet. Es kann aus einer zugeordneten NIB-Datei oder aus einer leeren Datei geladen werden, UIView
wenn null gefunden wurde. Dies macht es zu einem guten Ort, um Ihre Ansichten programmgesteuert im Code zu erstellen.
Hier sollten Unterklassen ihre benutzerdefinierte Ansichtshierarchie erstellen, wenn sie keine Schreibfeder verwenden. Sollte niemals direkt angerufen werden. Überschreiben Sie diese Methode nur, wenn Sie Ansichten programmgesteuert erstellen und die Stammansicht der view
Eigenschaft zuweisen. Rufen Sie keine Super-Methode auf, wenn Sie loadView überschreiben
2. loadViewIfNeeded
Wenn die aktuelle Ansicht viewController
noch nicht festgelegt wurde, lädt diese Methode die Ansicht. Beachten Sie jedoch, dass dies nur in iOS> = 9.0 verfügbar ist. Wenn Sie also iOS <9.0 unterstützen, erwarten Sie nicht, dass es ins Bild kommt.
Lädt die Ansicht des View Controllers, falls diese noch nicht festgelegt wurde.
3. viewDidLoad
Das viewDidLoad
Ereignis wird nur aufgerufen, wenn die Ansicht erstellt und in den Speicher geladen wird, die Grenzen für die Ansicht jedoch noch nicht definiert sind. Dies ist ein guter Ort, um die Objekte zu initialisieren, die der View Controller verwenden wird.
Wird aufgerufen, nachdem die Ansicht geladen wurde. Für im Code erstellte Ansichtscontroller ist dies nach -loadView. Bei Ansichtscontrollern, die nicht von einer Schreibfeder archiviert wurden, erfolgt dies nach dem Festlegen der Ansicht.
4. viewWillAppear
Dieses Ereignis benachrichtigt Sie, viewController
wenn die Ansicht auf dem Bildschirm angezeigt wird. In diesem Schritt hat die Ansicht Grenzen, die definiert sind, aber die Ausrichtung ist nicht festgelegt.
Wird aufgerufen, wenn die Ansicht sichtbar gemacht werden soll. Standard macht nichts.
5. viewWillLayoutSubviews
Dies ist der erste Schritt im Lebenszyklus, in dem die Grenzen festgelegt werden. Wenn Sie keine Einschränkungen oder kein automatisches Layout verwenden, möchten Sie wahrscheinlich die Unteransichten hier aktualisieren. Dies ist nur in iOS> = 5.0 verfügbar. Wenn Sie also iOS <5.0 unterstützen, erwarten Sie nicht, dass es ins Bild kommt.
Wird unmittelbar vor dem Aufruf der layoutSubviews-Methode des View Controllers aufgerufen. Unterklassen können nach Bedarf implementiert werden. Der Standardwert ist nop.
6. viewDidLayoutSubviews
Dieses Ereignis benachrichtigt den Ansichtscontroller, dass die Unteransichten eingerichtet wurden. Es ist ein guter Ort, um Änderungen an den Unteransichten vorzunehmen, nachdem sie festgelegt wurden. Dies ist nur in iOS> = 5.0 verfügbar. Wenn Sie also iOS <5.0 unterstützen, erwarten Sie nicht, dass es ins Bild kommt.
Wird direkt nach dem Aufruf der layoutSubviews-Methode des View Controllers aufgerufen. Unterklassen können nach Bedarf implementiert werden. Der Standardwert ist nop.
7. viewDidAppear
Das viewDidAppear
Ereignis wird ausgelöst, nachdem die Ansicht auf dem Bildschirm angezeigt wird. Dies macht es zu einem guten Ort, um Daten von einem Backend-Service oder einer Datenbank abzurufen.
Wird aufgerufen, wenn die Ansicht vollständig auf den Bildschirm übertragen wurde. Standard macht nichts
8. viewWillDisappear
Das viewWillDisappear
Ereignis wird ausgelöst, wenn die Ansicht des Präsentierten viewController
verschwinden, entlassen, verdeckt oder hinter anderen versteckt werden soll viewController
. Dies ist ein guter Ort, an dem Sie Ihre Netzwerkanrufe einschränken, den Timer ungültig machen oder daran gebundene Objekte freigeben können viewController
.
Wird aufgerufen, wenn die Ansicht verworfen, verdeckt oder anderweitig ausgeblendet wird.
9. viewDidDisappear
Dies ist der letzte Schritt des Lebenszyklus, den jeder ansprechen kann, wenn dieses Ereignis ausgelöst wird, nachdem die Ansicht der präsentierten viewController
Person verschwunden, entlassen, verdeckt oder verborgen wurde.
Wird aufgerufen, nachdem die Ansicht verworfen, verdeckt oder anderweitig ausgeblendet wurde. Standard macht nichts
Laut Apple sollten Sie bei der Implementierung dieser Methoden daran denken, die super
Implementierung dieser bestimmten Methode aufzurufen .
Wenn Sie UIViewController unterordnen, müssen Sie die Super-Implementierung dieser Methode aufrufen, auch wenn Sie keine NIB verwenden. (Der Einfachheit halber erledigt die Standard-Init-Methode dies für Sie und gibt für beide Argumente dieser Methode null an.) In der angegebenen NIB sollte für den Proxy des Dateibesitzers die Klasse auf Ihre View Controller-Unterklasse mit dem View-Ausgang festgelegt sein mit der Hauptansicht verbunden. Wenn Sie diese Methode mit einem Null-Nib-Namen aufrufen, -loadView
versucht die Methode dieser Klasse, eine NIB zu laden, deren Name mit der Klasse Ihres View Controllers übereinstimmt. Wenn tatsächlich keine solche NIB vorhanden ist, müssen Sie entweder aufrufen, -setView:
bevor sie -view
aufgerufen wird, oder die -loadView
Methode zum programmgesteuerten Einrichten Ihrer Ansichten überschreiben .
Hoffe das hat geholfen. Vielen Dank.
UPDATE - Wie @ThomasW im Kommentar gezeigt hat viewWillLayoutSubviews
und viewDidLayoutSubviews
auch zu anderen Zeiten aufgerufen wird, wenn Unteransichten der Hauptansicht geladen werden, z. B. wenn Zellen einer Tabellenansicht oder einer Sammlungsansicht geladen werden.
UPDATE - Wie @Maria im Kommentar zeigte, wurde die Beschreibung von loadView
aktualisiert