iOS-da viewWillAppear: metodun mahiyyəti və necə istifadə etməli

Müəllif: IT Sectr Dərc olunub: 2026-03-05 Oxuma vaxtı: 8 dəq

viewWillAppear — bu UIViewController metodudur, UIKit onu hər dəfə ekran istifadəçiyə görünməzdən əvvəl çağırır. Apple Developer Documentation-ya görə, bu metod keçidin animasiya ilə olub-olmadığını göstərən animated boolean parametri qəbul edir. viewWillAppear — məlumatları yeniləmək və ekran vəziyyətini sinxronlaşdırmaq üçün əsas yerdir.

Başlıca

  • viewWillAppear hər dəfə ekran görünəndə çağırılır, viewDidLoad-dən fərqli olaraq
  • Məlumatları yeniləmək və digər ekranlardan qayıtdıqdan sonra sinxronlaşdırmaq üçün istifadə olunur
  • animated parametri görünmənin animasiya ilə olub-olmadığını göstərir
  • Burada NavigationBar, TabBar və digər interfeys elementləri konfiqurasiya edilir
  • Yalnız görünən ekranda aktiv olan müvəqqəti bildirişlərə abunə olmaq üçün uyğundur

viewWillAppear nədir

viewWillAppear — bu UIViewController metodudur, UIKit onu View pəncərələr iyerarxiyasına əlavə edilməzdən dərhal əvvəl çağırır. Bu anda View Auto Layout keçidlərindən sonra son ölçülərə malikdir, lakin hələ istifadəçiyə görünmür — keçid animasiyası ya başlamayıb, ya da icra olunur. Tərtibatçı bu metodu hər dəfə ekran göstərilməzdən əvvəl baş verməli olan əməliyyatları yerinə yetirmək üçün ləğv edir.

Bir dəfə işləyən viewDidLoad-dən fərqli olaraq, viewWillAppear ekran görünmək üzrə olanda hər dəfə çağırılır: ilkin açılışda, uşaq kontrollerdən qayıtdıqda, modal pəncərə bağlandıqda və TabBar əlavələri dəyişdirilərkən. Bu onu interfeysin cari vəziyyətini qorumaq üçün əsas metoda çevirir.

Metod Bool tipli animated parametri qəbul edir, o, ekranın görünməsinin animasiya ilə müşayiət olunub-olunmadığını göstərir. Bu parametri ardıcıl davranış üçün oxşar parametrə malik olan NavigationBar və TabBar metodlarına ötürmək rahatdır.

viewWillAppear nə vaxt çağırılır

Vaxtlama viewWillAppear çağırışı naviqasiya növündən asılıdır, lakin ümumi qayda dəyişməz: metod View görünməzdən əvvəl işləyir. Əsas ssenariləri nəzərdən keçirək.

Ekranın ilk açılışında

viewDidLoad çağırıldıqdan sonra UIKit göstərməyə hazırlığa başlayır: View iyerarxiyaya əlavə edilir, layout keçidləri işlədilir və keçid animasiyası başlamazdan dərhal əvvəl viewWillAppear çağırılır. Bu anda ekran hələ görünmür, lakin bütün subviews düzgün ölçülərə malikdir və onların məzmununu təhlükəsiz şəkildə yeniləmək olar.

NavigationController-dan qayıdarkən

İstifadəçi geri düməsini basdıqda və ya proqramlı şəkildə popViewController çağırdıqda, UIKit əvvəlki ekrana qayıdır və onun viewWillAppear metodunu çağırır. Bu, viewWillAppear-ın istifadə edildiyi əsas ssenaridir — element əlavə edildikdən sonra siyahını yeniləmək və ya parametrləri sinxronlaşdırmaq.

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

Modal pəncərə bağlandıqda

Modal şəkildə təqdim edilmiş kontroller bağlandıqdan sonra UIKit onu təqdim edən kontrollerdə viewWillAppear çağırır. Bu ssenari, məlumatları geri qaytarmaq üçün delegate və ya closure-lardan istifadə edirsinizsə, xüsusi diqqət tələb edir — viewWillAppear ekranın nəticəni aldıqdan sonra yenilənəcəyinə zəmanət verir.

TabBar əlavələri dəyişdirilərkən

TabBarController hər dəfə əlavə dəyişdirilərkən seçilmiş əlavənin kontrollerində viewWillAppear çağırır. Ɖlavədə dinamik məlumatlar göstərilirsə — valyuta məzənnələri, bildirişlər, istifadəçi statusu — viewWillAppear onları yeniləmək üçün ideal yerdir.

viewWillAppear-da praktik tapşırıqlar

viewWillAppear digər metodlarda yerinə yetirilə bilməyən və ya optimal olmayan bir neçə konkret tapşırığı həll edir. Onlardan əsas olanları nəzərdən keçirək.

Cədvəl məlumatlarının yenilənməsi

viewWillAppear-ın ən çox istifadə olunan tətbiqi — ekran hər görünəndə UITableView və ya UICollectionView-ı yenidən yükləmək. Əgər məlumatlar əvvəlki ekranda dəyişə bilərsə (element əlavə edilməsi, status dəyişikliyi), viewWillAppear-da reloadData çağırmaq istifadəçinin aktual məlumat görməsinə zəmanət verir.

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

NavigationBar və TabBar konfiqurasiyası

viewWillAppear-da NavigationBar-ın görünüşünü konfiqurasiya etmək rahatdır: onu gizlətmək və ya göstərmək, rəngini dəyişmək, large title təyin etmək. Müxtəlif ekranlarda NavigationBar fərqli görünürsə, viewWillAppear bu dəyişikliklər üçün düzgün yerdir, çünki viewDidLoad yalnız bir dəfə çağırılır.

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

Müvəqqəti bildirişlərə abunəlik

Yalnız ekran görünərkən məna kəsb edən bildirişlər — klaviatura, məzmun dəyişikliyi bildirişləri — viewWillAppear-da abunə olunur və viewDidDisappear-da ləğv edilir. Bu, ekran aktiv olmadıqda əlavə handlerlərin qarşısını alır və yaddaş sızıntılarından qoruyur.

UI vəziyyətinin bərpası

Ekran tətbiq tərəfindən gizlədilə bilərsə və ya kiçəldilə bilərsə, viewWillAppear UI vəziyyətini bərpa etmək üçün rahat yerdir: seqmentləri dəyişmək, scroll vəziyyətini bərpa etmək, müvəqqəti dəyişiklikləri sıfırlamaq. İstifadəçi hər dəfə görünəndə ekranı proqnozlaşdırıla bilən formada alır.

Badge və sayıcıların yenilənməsi

Oxunmamış mesajların, reytinqlərin və ya bildirişlərin sayıcılarını göstərən ekranlarda viewWillAppear onları yeniləmək üçün düzgün yerdir. İstifadəçi başqa ekranda miqdarı dəyişə bilərsə, burada UITabBarItem.badgeValue və ya fərdi göstəricilərin yenidən hesablanması və yenilənməsi çağırılır. Bu, istifadəçinin digər ekranlarda nə qədər qaldığından asılı olmayaraq həmişə aktual rəqəmləri görməsinə zəmanət verir.

Ayrıca collectionView ilə işi qeyd etmək lazımdır: ekrandakı məlumatlar sayıcılar və ya statusları olan hücrələrdən ibarət şəbəkə şəklində təqdim olunursa, onların viewWillAppear-da yenilənməsi seçici olmalıdır. Tam reloadData əvəzinə, yanıb-sönmə və scroll vəziyyətinin itirilməsinin qarşısını almaq üçün görünən hücrələr üçün reloadItemsAtIndexPaths istifadə edin.

viewWillAppear və viewDidLoad arasındakı fərqlər

viewWillAppear və viewDidLoad arasındakı fərqi başa düşmək düzgün UIViewController arxitekturasının əsasıdır. Bu metodlar müxtəlif çağırılma tezliyinə, müxtəlif kontekstə və müxtəlif məqsədə malikdir.

viewDidLoad bir dəfə çağırılır və zamanla dəyişmayən konfiqurasiya üçün uyğundur: hücrələrin qeydiyyatı, delegate-lərin təyini, sabitlərin işə salınması. viewWillAppear hər görünmədə çağırılır və təkrarlanmalı olan əməliyyatlar üçün uyğundur: məlumatların yenilənməsi, görünən elementlərin konfiqurasiyası, vəziyyətin sinxronlaşdırılması.

XarakteristikaviewDidLoadviewWillAppear
TezlikBir dəfəHər dəfə görünəndə
View görünürYoxYox (tezliklə görünəcək)
View ölçüləriSon deyilSon
UyğundurBirdəfəlik konfiqurasiyaYeniləmə və sinxronlaşdırma
AnimasiyaTətbiq edilmiranimated parametri

Qızıl qayda: əməliyyat yalnız bir dəfə yerinə yetirilməlidirsə — viewDidLoad-a qoyun. Hər dəfə ekrana qayıdarkən təkrarlanmalıdırsa — viewWillAppear-a qoyun.

viewWillAppear-da tipik səhvlər

Yanlış istifadə viewWillAppear məhsuldarlıq problemlərinə, həddindən artıq yeniləmələrə və interfeysin uyğunsuz vəziyyətinə səbəb ola bilər. Ən tez-tez rast gəlinən səhvləri nəzərdən keçirək.

Birinci səhv — viewDidLoad məntiqinin təkrarlanması. Həm viewDidLoad-da, həm də viewWillAppear-da cədvəl hücrələrini qeydiyyatdan keçirirsinizsə — qeydiyyat dəfələrlə yerinə yetiriləcək, halbuki birdəfəlik konfiqurasiya kifayətdir. Bütün birdəfəlik konfiqurasiyaları viewDidLoad-a köçürün.

İkinci səhv — hər görünmədə şərtsiz reloadData. Məlumatlar dəyişməyibsə, cədvəli yenidən yükləmək data source-a əlavə sorğulara və hücrələrin yenidən çəkilməsinə səbəb olur, məhsuldarlığı azaldır. reloadData çağırmazdan əvvəl vəziyyətin həqiqətən dəyişib-dəyişmədiyini yoxlayın.

Üçüncü səhv — sorğu tamamlanmazdan əvvəl ekranın yenidən gizlədilə biləcəyini nəzərə almadan şəbəkə sorğuları ilə işləmək. viewWillAppear-da URLSession sorğusu başlatdıqda və istifadəçi dərhal başqa ekrana keçdikdə, nəticə artıq gizlədilmiş View-ə tətbiq oluna bilər. Yeniləmədən əvvəl ləğv edilə bilən tapşırıqlardan istifadə edin və ya isViewLoaded və window-u yoxlayın.

Dördüncü səhv — super çağırmağı unutmaq. super.viewWillAppear çağırmamaq valideyn kontrollerlərin (UINavigationController, UITabBarController) işini poza bilər və jestlərin və keçidlərin düzgün işlənməməsinə səbəb ola bilər. super həmişə çağırılmalıdır.

Beşinci səhv — layoutIfNeeded çağırmadan constraint-lərin dəyişdirilməsi. viewWillAppear-da proqramlı şəkildə constraints dəyişdirirsinizsə, UIKit onları dərhal tətbiq etmir — dəyişikliklər növbəti layout keçidinə qədər yığılır. Constraint dəyişikliklərindən sonra dərhal tətbiq etmək üçün view.layoutIfNeeded() çağırın. Bu, məzmundan asılı elementlərin hündurluğunu təyin edərkən xüsusilə vacibdir.

Altıncı səhv — viewWillAppear-da animasiya yerinı yetirmək cəhdi. Yuxarıda qeyd edildiyi kimi, UIKit hələ də keçid animasiyasını emal edir və sizin animasiyanız sistem animasiyası ilə rəqabət edə bilər. Elementin effektlə görünməsinə ehtiyacınız varsa, viewDidAppear-da giriş animasiyasından istifadə edin, viewWillAppear-da isə yalnız ilkin vəziyyəti konfiqurasiya edin: şəffaflıq 0, transform miqyası 0.8 və s.

Yeddinci səhv — animated parametrinin görməməzdən gəlinməsi. Bəzi tərtibatçılar viewWillAppear-da animated dəyərini yoxlamır və animasiyanın olmasından asılı olmalı əməliyyatları yerinə yetirirlər. Məsələn, NavigationBar-ı animated = false olduqda animasiyasız, animated = true olduqda isə animasiya ilə gizlətmək olar ki, keçid hamar görün-sün. animated parametrini həmişə müvafiq UIKit metodlarına ötürün.

Səkkizinci səhv — görünməyən ekranda UI modifikasiyası. viewWillAppear-da şəbəkə sorğusu başlatdıqda və onun completion block-u UI-nı yeniləyərkən ekran artıq yox ola bilərsə, istifadəçi yanıb-sönmə və ya uyğunsuz vəziyyət görəcək. Closure-larda UI yeniləməzdən əvvəl həmişə isViewLoaded və window-u yoxlayın. Bu sadə hərəkət crash-ların və əlavə interfeys yenidən çəkilmələrin qarşısını alır.

Tez-tez verilən suallar

viewWillAppear viewDidAppear-dan nə ilə fərqlənir?

viewWillAppear görünmə animasiyası başlamazdan əvvəl, View hələ görünmədikdə çağırılır. viewDidAppear — animasiya bitdikdən sonra, ekran tam göstərildikdə və qarşılıqlı əlaqə üçün əlçatan olduqda çağırılır.

viewWillAppear çağırılmaya bilərmi?

Normal şəraitdə viewWillAppear ekran görünəndə həmişə çağırılır. İstisna — tətbiqin məcburi bağlanması (force quit), bu halda UIKit Lifecycle metodlarını çağırmağa vaxt tapmır.

super.viewWillAppear çağırmaq lazımdırmı?

Bəli, mütləq. UIKit bu çağırışı UINavigationController və UITabBarController ilə daxili koordinasiya üçün istifadə edir. Super olmadan jestlər və keçid animasiyaları poçula bilər.

viewWillAppear TabBarController-də nə qədər tez-tez çağırılır?

Hər dəfə əlavə dəyişdirilərkən. UIKit istifadəçi TabBar-da müvafiq işarəyə toxunan kimi seçilmiş əlavənin kontrollerində viewWillAppear çağırır.

viewWillAppear vasitəsilə məlumatları geri necə ötürmək olar?

Kontrollerin xassələrini və ya ümumi data source istifadə edin. popViewController çağırmazdan əvvəl əvvəlki kontrollerdə lazımi dəyərləri təyin edin və onun viewWillAppear-ında onlar artıq əlçatan olacaq.

Nəticə

  • viewWillAppear birdəfəlik viewDidLoad-dən fərqli olaraq hər dəfə ekran görünəndə çağırılır
  • Cədvəllərin, kolleksiyaların və UI vəziyyətinin yenilənməsi üçün istifadə olunur
  • animated parametri davranışı animasiyalı və animasiyasız keçidlərə uyğunlaşdırmağa imkan verir
  • NavigationBar, TabBar və digər naviqasiya elementləri viewWillAppear-da konfiqurasiya edilir
  • Bildirişlərə müvəqqəti abunəliklər viewWillAppear üçün düzgün haldır
  • viewDidLoad məntiqinin təkrarlanmasından və şərtsiz reloadData-dan çəkinin
  • Naviqasiyanın düzgün işləməsi üçün həmişə super.viewWillAppear çağırın

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun