viewWillAppear di iOS: esensi metode dan cara menggunakannya

Penulis: IT Sectr Diterbitkan: 2026-03-05 Waktu membaca: 8 mnt

viewWillAppear — adalah metode UIViewController yang dipanggil UIKit setiap kali sebelum layar menjadi terlihat oleh pengguna. Menurut Apple Developer Documentation, metode ini menerima parameter boolean animated yang menunjukkan apakah transisi terjadi dengan animasi. viewWillAppear — adalah tempat utama untuk memperbarui data dan menyinkronkan status layar.

Utama

  • viewWillAppear dipanggil setiap kali layar muncul, tidak seperti viewDidLoad
  • Digunakan untuk memperbarui data dan sinkronisasi setelah kembali dari layar lain
  • Parameter animated menunjukkan apakah kemunculan terjadi dengan animasi
  • Di sini mengonfigurasi NavigationBar, TabBar dan elemen antarmuka lainnya
  • Cocok untuk berlangganan pemberitahuan sementara, aktif hanya saat layar terlihat

Apa itu viewWillAppear

viewWillAppear — adalah metode UIViewController yang dipanggil UIKit tepat sebelum menambahkan View ke hierarki jendela. Pada saat ini View sudah memiliki ukuran akhir setelah melewati Auto Layout, tetapi belum terlihat oleh pengguna — animasi transisi belum dimulai atau sedang berjalan. Pengembang menimpa metode ini untuk melakukan operasi yang harus terjadi sebelum setiap tampilan layar.

Tidak seperti viewDidLoad yang dipanggil sekali, viewWillAppear dipanggil setiap kali layar akan muncul: saat pembukaan awal, saat kembali dari controller anak, setelah menutup jendela modal dan saat mengganti tab TabBar. Ini menjadikannya metode kunci untuk menjaga status antarmuka tetap terkini.

Metode menerima parameter animated bertipe Bool, yang bernilai true jika kemunculan layar disertai animasi. Parameter ini nyaman untuk diteruskan ke metode NavigationBar dan TabBar yang memiliki parameter serupa untuk perilaku yang konsisten.

Kapan viewWillAppear dipanggil

Waktu pemanggilan viewWillAppear tergantung pada jenis navigasi, tetapi aturan umumnya tidak berubah: metode dijalankan sebelum View menjadi terlihat. Mari kita lihat skenario utama.

Saat pembukaan pertama layar

Setelah pemanggilan viewDidLoad, UIKit memulai persiapan untuk ditampilkan: View ditambahkan ke hierarki, proses layout dijalankan, dan tepat sebelum dimulainya animasi transisi, viewWillAppear dipanggil. Pada saat ini layar belum terlihat, tetapi semua subview memiliki ukuran yang benar dan kontennya dapat diperbarui dengan aman.

Saat kembali dari NavigationController

Ketika pengguna menekan tombol kembali atau memanggil popViewController secara terprogram, UIKit kembali ke layar sebelumnya dan memanggil viewWillAppear padanya. Ini adalah skenario utama untuk penggunaan viewWillAppear — memperbarui daftar setelah menambahkan elemen atau menyinkronkan pengaturan.

swift
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    tableView.reloadData()
    updateBadgeCount()
}

Saat menutup jendela modal

Setelah menutup controller yang disajikan secara modal, UIKit memanggil viewWillAppear pada controller yang menyajikannya. Skenario ini memerlukan perhatian khusus jika Anda menggunakan delegasi atau closure untuk mengirim data kembali — viewWillAppear memastikan layar akan diperbarui setelah menerima hasil.

Saat mengganti tab TabBar

TabBarController memanggil viewWillAppear pada controller tab yang dipilih setiap kali saat mengganti. Jika pada tab ditampilkan data dinamis — nilai tukar, pemberitahuan, status pengguna — viewWillAppear adalah tempat ideal untuk memperbaruinya.

Tugas praktis di viewWillAppear

viewWillAppear menyelesaikan beberapa tugas konkret yang tidak dapat atau tidak optimal dilakukan di metode lain. Mari kita lihat yang utama.

Memperbarui data tabel

Penggunaan viewWillAppear yang paling umum — memuat ulang UITableView atau UICollectionView setiap kali layar muncul. Jika data mungkin berubah di layar sebelumnya (menambahkan elemen, mengubah status), pemanggilan reloadData di viewWillAppear memastikan pengguna melihat informasi terkini.

swift
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    viewModel.synchronize()
    tableView.reloadData()
}

Mengonfigurasi NavigationBar dan TabBar

Di viewWillAppear nyaman untuk mengonfigurasi tampilan NavigationBar: menyembunyikan atau menampilkannya, mengubah warna, mengatur large title. Jika NavigationBar terlihat berbeda di layar yang berbeda, viewWillAppear adalah tempat yang tepat untuk perubahan ini, karena viewDidLoad hanya dipanggil sekali.

swift
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.setNavigationBarHidden(
        false, animated: animated
    )
    navigationController?.navigationBar.prefersLargeTitles = true
    tabBarController?.tabBar.isHidden = false
}

Berlangganan pemberitahuan sementara

Pemberitahuan yang hanya berarti saat layar terlihat — keyboard, pemberitahuan perubahan konten — dilanggan di viewWillAppear dan dibatalkan di viewDidDisappear. Ini mencegah handler yang tidak perlu saat layar tidak aktif dan melindungi dari kebocoran memori.

Memulihkan status UI

Jika layar dapat disembunyikan oleh aplikasi atau diminimalkan, viewWillAppear adalah tempat yang nyaman untuk memulihkan status UI: mengganti segmen, memulihkan posisi scroll, mereset perubahan sementara. Pengguna menerima layar dalam bentuk yang dapat diprediksi setiap kali muncul.

Memperbarui lencana dan penghitung

Di layar yang menampilkan penghitung pesan belum dibaca, peringkat atau pemberitahuan, viewWillAppear adalah tempat yang tepat untuk memperbaruinya. Jika pengguna mungkin mengubah jumlah di layar lain, di sini dipanggil perhitungan ulang dan pembaruan UITabBarItem.badgeValue atau indikator khusus. Ini memastikan pengguna selalu melihat angka terkini terlepas dari berapa lama dia berada di layar lain.

Secara terpisah perlu disebutkan bekerja dengan collectionView: jika data di layar disajikan dalam bentuk kisi dengan sel yang berisi penghitung atau status, pembaruannya di viewWillAppear harus selektif. Alih-alih reloadData lengkap, gunakan reloadItemsAtIndexPaths untuk sel yang terlihat untuk menghindari kedipan dan kehilangan posisi scroll.

Perbedaan viewWillAppear dan viewDidLoad

Memahami perbedaan antara viewWillAppear dan viewDidLoad — dasar arsitektur UIViewController yang benar. Metode ini memiliki frekuensi pemanggilan yang berbeda, konteks yang berbeda dan tujuan yang berbeda.

viewDidLoad dipanggil sekali dan cocok untuk konfigurasi yang tidak berubah seiring waktu: pendaftaran sel, pengaturan delegasi, inisialisasi konstanta. viewWillAppear dipanggil setiap kali muncul dan cocok untuk operasi yang harus diulang: memperbarui data, mengonfigurasi elemen yang terlihat, menyinkronkan status.

KarakteristikviewDidLoadviewWillAppear
FrekuensiSekaliSetiap kali saat muncul
View terlihatTidakTidak (segera akan terlihat)
Ukuran ViewBelum finalFinal
Cocok untukKonfigurasi sekaliPembaruan dan sinkronisasi
AnimasiTidak berlakuParameter animated

Aturan emas: jika operasi harus dilakukan hanya sekali — taruh di viewDidLoad. Jika setiap kali kembali ke layar — taruh di viewWillAppear.

Kesalahan umum di viewWillAppear

Penggunaan yang salah dari viewWillAppear dapat menyebabkan masalah kinerja, pembaruan berlebihan dan status antarmuka yang tidak konsisten. Mari kita lihat kesalahan yang paling umum.

Kesalahan pertama — menduplikasi logika dari viewDidLoad. Jika Anda mendaftarkan sel tabel baik di viewDidLoad maupun di viewWillAppear — pendaftaran akan dilakukan beberapa kali, padahal konfigurasi sekali sudah cukup. Pindahkan semua konfigurasi sekali ke viewDidLoad.

Kesalahan kedua — reloadData tanpa syarat setiap kali muncul. Jika data tidak berubah, memuat ulang tabel menyebabkan permintaan tambahan ke data source dan menggambar ulang sel, mengurangi kinerja. Periksa apakah status benar-benar berubah sebelum memanggil reloadData.

Kesalahan ketiga — bekerja dengan permintaan jaringan tanpa mempertimbangkan bahwa layarmungkin disembunyikan lagi sebelum permintaan selesai. Jika di viewWillAppear Anda memulai permintaan URLSession dan pengguna segera pergi ke layar lain, hasilnya mungkin diterapkan ke View yang sudah tersembunyi. Gunakan tugas yang dapat dibatalkan atau periksa isViewLoaded dan window sebelum memperbarui.

Kesalahan keempat — lupa memanggil super. Tidak memanggil super.viewWillAppear dapat mengganggu pengoperasian controller induk (UINavigationController, UITabBarController) dan menyebabkan pemrosesan gerakan dan transisi yang salah. super harus selalu dipanggil.

Kesalahan kelima — mengubah batasan tanpa memanggil layoutIfNeeded. Jika di viewWillAppear Anda mengubah batasan secara terprogram, UIKit tidak menerapkannya segera — perubahan terakumulasi hingga proses layout berikutnya. Untuk penerapan segera perubahan setelah memodifikasi batasan, panggil view.layoutIfNeeded(). Ini sangat penting saat mengatur tinggi elemen yang tergantung pada konten.

Kesalahan keenam — mencoba menjalankan animasi di viewWillAppear. Seperti disebutkan di atas, UIKit masih memproses animasi transisi dan animasi Anda mungkin bersaing dengan animasi sistem. Jika Anda membutuhkan elemen muncul dengan efek, gunakan animasi masuk di viewDidAppear, dan di viewWillAppear hanya konfigurasikan status awal: transparansi 0, transform skala 0.8, dan seterusnya.

Kesalahan ketujuh — mengabaikan parameter animated. Beberapa pengembang tidak memeriksa nilai animated di viewWillAppear dan melakukan operasi yang harus tergantung pada keberadaan animasi. Misalnya, menyembunyikan NavigationBar dengan animated = false dapat dilakukan tanpa animasi, dan dengan animated = true — dengan animasi, agar transisi terlihat halus. Selalu teruskan parameter animated ke metode UIKit yang sesuai.

Kesalahan kedelapan — memodifikasi UI saat layar tidak terlihat. Jika di viewWillAppear Anda memulai permintaan jaringan dan blok penyelesaiannya memperbarui UI ketika layarmungkin sudah menghilang, pengguna akan melihat kedipan atau status yang tidak konsisten. Selalu periksa isViewLoaded dan window sebelum memperbarui UI di closure. Tindakan sederhana ini mencegah crash dan penggambaran ulang antarmuka yang tidak perlu.

Pertanyaan yang sering diajukan

Apa perbedaan viewWillAppear dan viewDidAppear?

viewWillAppear dipanggil sebelum animasi kemunculan dimulai, saat View belum terlihat. viewDidAppear — setelah animasi selesai, saat layar telah sepenuhnya ditampilkan dan tersedia untuk interaksi.

Bisakah viewWillAppear tidak dipanggil?

Dalam kondisi normal viewWillAppear selalu dipanggil saat layar muncul. Pengecualian — penutupan paksa aplikasi (force quit), saat UIKit tidak sempat memanggil metode Lifecycle.

Apakah perlu memanggil super.viewWillAppear?

Ya, wajib. UIKit menggunakan panggilan ini untuk koordinasi internal dengan UINavigationController dan UITabBarController. Tanpa super, gerakan dan animasi transisi bisa rusak.

Seberapa sering viewWillAppear dipanggil di TabBarController?

Setiap kali penggantian tab. UIKit memanggil viewWillAppear pada controller tab yang dipilih segera setelah pengguna menyentuh ikon yang sesuai di TabBar.

Bagaimana mengirim data kembali melalui viewWillAppear?

Gunakan properti controller atau data source bersama. Sebelum memanggil popViewController, atur nilai yang diperlukan pada controller sebelumnya, dan di viewWillAppear-nya nilai tersebut sudah tersedia.

Ringkasan

  • viewWillAppear dipanggil sebelum setiap kemunculan layar, tidak seperti viewDidLoad yang dipanggil sekali
  • Digunakan untuk memperbarui data tabel, koleksi dan status UI
  • Parameter animated memungkinkan penyesuaian perilaku untuk transisi dengan dan tanpa animasi
  • NavigationBar, TabBar dan elemen navigasi lainnya dikonfigurasi di viewWillAppear
  • Langganan sementara pemberitahuan — kasus yang tepat untuk viewWillAppear
  • Hindari duplikasi logika viewDidLoad dan reloadData tanpa syarat
  • Selalu panggil super.viewWillAppear untuk pengoperasian navigasi yang benar

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga