Bu, en son iOS Sürümleri içindir ( Xcode 9.3, Swift 4.1 ile modifiye edilmiştir ). Aşağıda, yaşam döngüsünü UIViewController
tamamlayan tüm aşamalar verilmiştir .
loadView()
loadViewIfNeeded()
viewDidLoad()
viewWillAppear(_ animated: Bool)
viewWillLayoutSubviews()
viewDidLayoutSubviews()
viewDidAppear(_ animated: Bool)
viewWillDisappear(_ animated: Bool)
viewDidDisappear(_ animated: Bool)
Tüm bu aşamaları açıklayayım.
1. loadView
Bu olay, denetleyicinin yönettiği görünümü oluşturur / yükler. İlişkili bir uç dosyasından veya boş UIView
bulunursa boş bir dosyadan yüklenebilir . Bu, kod içinde görünümlerinizi programlı olarak oluşturmak için iyi bir yer yapar.
Bu, alt sınıfların uç kullanmıyorsa özel görünüm hiyerarşilerini oluşturmaları gereken yerdir. Asla doğrudan çağrılmamalıdır. Bu yöntemi yalnızca programlı olarak görünümler oluşturduğunuzda ve kök görünümü view
özelliğe atadığınızda geçersiz kılın Loadload'u geçersiz kıldığınızda süper yöntemi arama
2. loadViewIfNeeded
Akım görünümü viewController
henüz ayarlanmamışsa, bu yöntem görünümü yükler, ancak hatırlar, bu yalnızca iOS> = 9.0'da kullanılabilir. Dolayısıyla, iOS <9.0'ı destekliyorsanız, resmin içine girmesini beklemeyin.
Henüz ayarlanmamışsa görünüm denetleyicisinin görünümünü yükler.
3. viewDidLoad
viewDidLoad
Görünümü oluşturulur ve yüklenen belleğe ama görünüm için sınırları henüz tanımlanmamış olduğunda olay sadece denir. Bu, görünüm denetleyicisinin kullanacağı nesneleri başlatmak için iyi bir yerdir.
Görünüm yüklendikten sonra çağrılır. Kodda oluşturulan görünüm denetleyicileri için bu -loadView öğesinden sonra gelir. Bir uçtan arşivlenmemiş görünüm denetleyicileri için bu görünüm ayarlandıktan sonra yapılır.
4. viewWillAppear
Bu olay viewController
, görünüm ekranda her görüntülendiğinde bunu bildirir . Bu adımda görünümün tanımlanmış sınırları vardır ancak yön ayarlanmamıştır.
Görünüm görünür hale getirmek üzereyken çağrılır. Varsayılan hiçbir şey yapmaz.
5. viewWillLayoutSubviews
Bu, yaşam döngüsünde sınırların kesinleştiği ilk adımdır. Kısıtlamalar veya Otomatik Düzen kullanmıyorsanız, muhtemelen alt görünümleri burada güncellemek istersiniz. Bu yalnızca iOS> = 5.0 sürümünde kullanılabilir. Dolayısıyla, iOS <5.0'ı destekliyorsanız, resme gelmesini beklemeyin.
Görünüm denetleyicisinin görünümünün layoutSubviews yöntemi çağrılmadan hemen önce çağrılır. Alt sınıflar gerektiği gibi uygulanabilir. Varsayılan bir nop değeridir.
6. viewDidLayoutSubviews
Bu olay, görünüm denetleyicisine alt görünümlerin ayarlandığını bildirir. Alt görünümler oluşturulduktan sonra herhangi bir değişiklik yapmak için iyi bir yerdir. Bu yalnızca iOS> = 5.0 sürümünde kullanılabilir. Dolayısıyla, iOS <5.0'ı destekliyorsanız, resme gelmesini beklemeyin.
Görünüm denetleyicisinin görünümünün layoutSubviews yöntemi çağrıldıktan hemen sonra çağrılır. Alt sınıflar gerektiği gibi uygulanabilir. Varsayılan bir nop değeridir.
7. viewDidAppear
viewDidAppear
Görünümde sonra olay yangınlar ekranda sunulur. Bu, bir arka uç hizmetinden veya veritabanından veri almak için iyi bir yer yapar.
Görünüm tamamen ekrana geçtiğinde çağrılır. Varsayılan hiçbir şey yapmaz
8. viewWillDisappear
Sunulan viewWillDisappear
görüş viewController
kaybolmak, reddetmek, örtmek veya gizlemek üzereyken olay tetiklenir viewController
. Bu, ağ aramalarınızı kısıtlayabileceğiniz, zamanlayıcıyı geçersiz kılabileceğiniz veya buna bağlı nesneleri bırakabileceğiniz iyi bir yerdir viewController
.
Görünüm kapatıldığında, kapatıldığında veya başka bir şekilde gizlendiğinde çağrılır.
9. viewDidDisappear
Bu, sunulan olay viewController
kaybolduktan, reddedildikten, kapatıldıktan veya gizlendikten hemen sonra bu olay tetiklendiğinde herkesin ele alabileceği yaşam döngüsünün son adımıdır .
Görünüm reddedildikten, kapatıldıktan veya başka bir şekilde gizlendikten sonra çağrılır. Varsayılan hiçbir şey yapmaz
Şimdi Apple'a göre bu yöntemleri super
uygularken söz konusu yöntemin uygulanmasını çağırmayı unutmamalısınız .
UIViewController alt sınıfını kullanıyorsanız, bir NIB kullanmasanız bile bu yöntemin süper uygulamasını çağırmalısınız. (Kolaylık olması açısından, varsayılan init yöntemi bunu sizin için yapar ve bu yöntem bağımsız değişkenlerinin her ikisi için de nil belirtir.) Belirtilen NIB'de, Dosya Sahibi proxy'sinin görünümü, görünüm çıkışı ile görünüm denetleyicisi alt sınıfınıza ayarlanmış olmalıdır ana görünüme bağlı. Bu yöntemi bir nil nib adıyla çağırırsanız, bu sınıfın -loadView
yöntemi, adı görünüm denetleyicinizin sınıfıyla aynı olan bir NIB yüklemeye çalışır. Aslında böyle bir NIB mevcut değilse, daha -setView:
önce -view
çağrılmalı veya -loadView
görünümlerinizi programlı olarak ayarlama yöntemini geçersiz kılmalısınız.
Umarım bu yardımcı olmuştur. Teşekkürler.
GÜNCELLEME - As @ThomasW yorumun içindeki sivri viewWillLayoutSubviews
ve viewDidLayoutSubviews
ana görünümün subviews yüklendiğinde bir tablo görünümünde veya toplama bakış hücreler yüklendiğinde da örneğin, diğer zamanlarda çağrılacak.
GÜNCELLEME - @Maria yorumda işaret ettiği gibi, açıklaması loadView
güncellendi