Ini untuk Versi iOS terbaru (Dimodifikasi dengan Xcode 9.3, Swift 4.1 ). Di bawah ini adalah semua tahapan yang membuat siklus hidup menjadi UIViewController
lengkap.
loadView()
loadViewIfNeeded()
viewDidLoad()
viewWillAppear(_ animated: Bool)
viewWillLayoutSubviews()
viewDidLayoutSubviews()
viewDidAppear(_ animated: Bool)
viewWillDisappear(_ animated: Bool)
viewDidDisappear(_ animated: Bool)
Izinkan saya menjelaskan semua tahapan itu.
1. loadView
Acara ini membuat / memuat tampilan yang dikendalikan pengontrol. Itu dapat memuat dari file nib terkait atau kosong UIView
jika null ditemukan. Ini menjadikannya tempat yang bagus untuk membuat tampilan Anda dalam kode secara terprogram.
Di sinilah subclass harus membuat hierarki tampilan khusus mereka jika mereka tidak menggunakan nib. Seharusnya tidak pernah dipanggil secara langsung. Hanya timpa metode ini ketika Anda secara terprogram membuat tampilan dan menetapkan tampilan root ke view
properti Jangan panggil metode super saat Anda mengganti
loadView
2. loadViewIfNeeded
Jika memunculkan pandangan saat viewController
ini belum ditetapkan maka metode ini akan memuat tampilan tetapi ingat, ini hanya tersedia di iOS> = 9.0. Jadi, jika Anda mendukung iOS <9.0 maka jangan berharap itu masuk ke dalam gambar.
Memuat tampilan pengontrol tampilan jika belum ditetapkan.
3. viewDidLoad
The viewDidLoad
event hanya disebut ketika tampilan dibuat dan dimuat ke memori tapi batas untuk pandangan tidak didefinisikan belum. Ini adalah tempat yang baik untuk menginisialisasi objek yang akan digunakan pengontrol tampilan.
Dipanggil setelah tampilan dimuat. Untuk pengontrol tampilan yang dibuat dalam kode, ini adalah setelah-loadView. Untuk pengontrol tampilan yang tidak diarsipkan dari nib, ini setelah tampilan ditetapkan.
4. viewWillAppear
Acara ini memberi tahu viewController
kapan saja tampilan muncul di layar. Pada langkah ini tampilan memiliki batas yang ditentukan tetapi orientasi tidak diatur.
Dipanggil saat tampilan hendak dibuat terlihat. Default tidak melakukan apa-apa.
5. viewWillLayoutSubviews
Ini adalah langkah pertama dalam siklus hidup tempat batas diselesaikan. Jika Anda tidak menggunakan kendala atau Tata Letak Otomatis, Anda mungkin ingin memperbarui subview di sini. Ini hanya tersedia di iOS> = 5.0. Jadi jika Anda mendukung iOS <5.0 maka jangan berharap itu masuk ke dalam gambar.
Disebut tepat sebelum metode layoutSubviews tampilan view controller dipanggil. Subkelas dapat diimplementasikan seperlunya. Standarnya adalah nop.
6. viewDidLayoutSubviews
Acara ini memberi tahu pengontrol tampilan bahwa subview telah disiapkan. Ini adalah tempat yang bagus untuk membuat perubahan pada subview setelah ditetapkan. Ini hanya tersedia di iOS> = 5.0. Jadi jika Anda mendukung iOS <5.0 maka jangan berharap itu masuk ke dalam gambar.
Disebut tepat setelah metode layoutSubviews tampilan view controller dipanggil. Subkelas dapat diimplementasikan seperlunya. Standarnya adalah nop.
7. viewDidAppear
The viewDidAppear
peristiwa kebakaran setelah pandangan disajikan di layar. Yang menjadikannya tempat yang baik untuk mendapatkan data dari layanan backend atau database.
Disebut ketika tampilan telah sepenuhnya dialihkan ke layar. Default tidak melakukan apa-apa
8. viewWillDisappear
The viewWillDisappear
peristiwa kebakaran ketika pandangan yang disajikan viewController
adalah tentang menghilang, mengabaikan, menutupi atau menyembunyikan belakang lainnya viewController
. Ini adalah tempat yang baik di mana Anda dapat membatasi panggilan jaringan Anda, membatalkan timer atau melepaskan objek yang terikat itu viewController
.
Disebut ketika tampilan ditolak, ditutupi atau disembunyikan.
9. viewDidDisappear
Ini adalah langkah terakhir dari siklus hidup yang dapat diatasi oleh siapa saja karena peristiwa ini terjadi segera setelah tampilan yang disajikan viewController
telah hilang, diberhentikan, ditutupi atau disembunyikan.
Dipanggil setelah pandangan ditolak, ditutupi atau disembunyikan. Default tidak melakukan apa-apa
Sekarang sesuai Apple ketika Anda menerapkan metode ini, Anda harus ingat untuk memanggil super
implementasi metode tertentu.
Jika Anda subkelas UIViewController, Anda harus memanggil super implementasi metode ini, bahkan jika Anda tidak menggunakan NIB. (Sebagai kenyamanan, metode init default akan melakukan ini untuk Anda, dan tentukan nihil untuk kedua argumen metode ini.) Dalam NIB yang ditentukan, proksi Pemilik File harus mengatur kelasnya ke subkelas pengontrol tampilan Anda, dengan outlet tampilan. terhubung ke tampilan utama. Jika Anda memanggil metode ini dengan nama nil nib, maka -loadView
metode kelas ini akan mencoba memuat NIB yang namanya sama dengan kelas pengontrol tampilan Anda. Jika tidak ada NIB seperti itu, maka Anda harus memanggil -setView:
sebelum -view
dipanggil, atau mengganti -loadView
metode untuk mengatur tampilan Anda secara terprogram.
Semoga ini bisa membantu. Terima kasih.
UPDATE - Seperti @ThomasW menunjuk ke dalam komentar viewWillLayoutSubviews
dan viewDidLayoutSubviews
juga akan dipanggil pada waktu lain ketika subview dari tampilan utama dimuat, misalnya ketika sel-sel tampilan tabel atau tampilan koleksi dimuat.
UPDATE - Seperti @Maria menunjuk ke dalam komentar, deskripsi loadView
telah diperbarui