यह नवीनतम iOS संस्करणों ( Xcode 9.3, स्विफ्ट 4.1 के साथ संशोधित ) के लिए है। नीचे सभी चरण हैं जो UIViewController
पूर्ण रूप से जीवनचक्र बनाते हैं ।
loadView()
loadViewIfNeeded()
viewDidLoad()
viewWillAppear(_ animated: Bool)
viewWillLayoutSubviews()
viewDidLayoutSubviews()
viewDidAppear(_ animated: Bool)
viewWillDisappear(_ animated: Bool)
viewDidDisappear(_ animated: Bool)
मुझे उन सभी चरणों की व्याख्या करें।
1। loadView
यह ईवेंट उस दृश्य को बनाता / लोड करता है जो नियंत्रक प्रबंधित करता है। यह एक संबंधित नीब फ़ाइल या रिक्त से लोड कर सकता है UIView
यदि रिक्त पाया गया था। यह प्रोग्राम में अपने विचारों को प्रोग्रामेटिक रूप से बनाने के लिए एक अच्छी जगह बनाता है।
यह वह जगह है जहाँ उपवर्गों को अपने कस्टम दृश्य पदानुक्रम का निर्माण करना चाहिए यदि वे एक निब का उपयोग नहीं कर रहे हैं। कभी भी सीधे नहीं बुलाया जाना चाहिए। केवल इस विधि को ओवरराइड करें जब आप प्रोग्राम बनाते हैं और view
संपत्ति को रूट दृश्य असाइन करते हैं तो लोड को ओवरराइड करने पर सुपर विधि को कॉल न करें।
2। loadViewIfNeeded
यदि वर्तमान viewController
का दृश्य अभी तक सेट नहीं किया गया है, तो यह विधि दृश्य को लोड करेगी लेकिन याद रखें, यह केवल iOS> = 9.0 में उपलब्ध है। इसलिए यदि आप iOS <9.0 का समर्थन कर रहे हैं, तो चित्र में आने की उम्मीद न करें।
यदि यह पहले से सेट नहीं किया गया है, तो दृश्य नियंत्रक के दृश्य को लोड करता है।
3। viewDidLoad
viewDidLoad
जब दृश्य निर्मित हो और मेमोरी में लोड लेकिन देखने के लिए सीमा अभी तक परिभाषित नहीं कर रहे हैं घटना केवल कहा जाता है। यह उन ऑब्जेक्ट्स को इनिशियलाइज़ करने के लिए एक अच्छी जगह है जिन्हें व्यू कंट्रोलर इस्तेमाल करने वाला है।
दृश्य लोड होने के बाद कॉल किया गया। कोड में बनाए गए कंट्रोलर के लिए, यह बाद-लोड व्यू है। किसी नियब से अनियंत्रित व्यू कंट्रोलर के लिए, यह दृश्य सेट होने के बाद है।
4। viewWillAppear
viewController
जब भी स्क्रीन पर दृश्य दिखाई देता है, यह घटना सूचित करती है । इस चरण में दृश्य में सीमाएँ हैं जो परिभाषित की गई हैं, लेकिन अभिविन्यास सेट नहीं है।
जब दृश्य दिखाई देने वाला हो तो कॉल किया जाता है। डिफ़ॉल्ट कुछ नहीं करता है।
5। viewWillLayoutSubviews
यह जीवनचक्र का पहला चरण है जहां सीमाओं को अंतिम रूप दिया जाता है। यदि आप बाधाओं या ऑटो लेआउट का उपयोग नहीं कर रहे हैं, तो आप शायद यहां उप-अपडेट अपडेट करना चाहते हैं। यह केवल iOS> = 5.0 में उपलब्ध है। इसलिए यदि आप iOS <5.0 का समर्थन कर रहे हैं, तो उम्मीद न करें कि यह तस्वीर में आ जाएगा।
कंट्रोलर के व्यूज़ लेआउट से पहले ही कॉल किया जाता है। साक्षात्कार विधि लागू की जाती है। उपवर्ग आवश्यक के रूप में लागू कर सकते हैं। डिफ़ॉल्ट एक एनओपी है।
6। viewDidLayoutSubviews
यह घटना दृश्य नियंत्रक को सूचित करती है कि साक्षात्कार सेट हो चुके हैं। यह सेट होने के बाद साक्षात्कार में कोई बदलाव करने के लिए एक अच्छी जगह है। यह केवल iOS> = 5.0 में उपलब्ध है। इसलिए यदि आप iOS <5.0 का समर्थन कर रहे हैं, तो उम्मीद न करें कि यह तस्वीर में आ जाएगा।
कंट्रोलर के व्यूज़ लेआउट के बाद ही कॉल किया जाता है। साक्षात्कार विधि लागू की जाती है। उपवर्ग आवश्यक के रूप में लागू कर सकते हैं। डिफ़ॉल्ट एक एनओपी है।
7। viewDidAppear
viewDidAppear
दृश्य के बाद घटना की आग स्क्रीन पर प्रस्तुत किया है। जो बैकएंड सेवा या डेटाबेस से डेटा प्राप्त करने के लिए एक अच्छी जगह बनाता है।
जब दृश्य को स्क्रीन पर पूरी तरह से परिवर्तित किया गया हो तो कॉल किया जाता है। डिफ़ॉल्ट कुछ भी नहीं करता है
8। viewWillDisappear
viewWillDisappear
घटना आग प्रस्तुत की दृष्टि जब viewController
के बारे में, गायब हो जाते हैं खारिज, कवर या छिपाने के दूसरे के पीछे करने के लिए है viewController
। यह एक अच्छी जगह है जहां आप अपने नेटवर्क कॉल को प्रतिबंधित कर सकते हैं, टाइमर को अमान्य कर सकते हैं या उन वस्तुओं को छोड़ सकते हैं जो उस से संबंधित हैं viewController
।
जब दृश्य खारिज, कवर या अन्यथा छिपा हुआ हो तो कॉल किया जाता है।
9। viewDidDisappear
यह जीवनचक्र का अंतिम चरण है जिसे कोई भी प्रस्तुत कर सकता है क्योंकि प्रस्तुत किए जाने viewController
, हटाए जाने, ढंकने या छुप जाने के बाद इस घटना की आग भड़क सकती है।
दृश्य खारिज, कवर या अन्यथा छिपे होने के बाद कॉल किया गया। डिफ़ॉल्ट कुछ नहीं करता है
अब Apple के अनुसार जब आप इस तरीके को लागू कर रहे हैं तो आपको super
उस विशिष्ट विधि के कार्यान्वयन को याद करना चाहिए ।
यदि आप UIViewController को उप-वर्ग करते हैं, तो आपको इस विधि के सुपर कार्यान्वयन को कॉल करना होगा, भले ही आप NIB का उपयोग न कर रहे हों। (एक सुविधा के रूप में, डिफ़ॉल्ट इनिट विधि आपके लिए यह करेगी, और इस दोनों तरीकों के तर्कों के लिए nil निर्दिष्ट करेगी।) निर्दिष्ट NIB में, फ़ाइल के स्वामी प्रॉक्सी को अपने क्लास कंट्रोलर को अपने व्यू कंट्रोलर उपवर्ग में, व्यू आउटलेट के साथ सेट करना चाहिए। मुख्य दृश्य से जुड़ा है। यदि आप इस विधि को शून्य नाम के साथ लागू करते हैं, तो यह वर्ग ' -loadView
विधि एक NIB को लोड करने का प्रयास करेगी जिसका नाम आपके दृश्य नियंत्रक की कक्षा के समान है। यदि वास्तव में ऐसा कोई एनआईबी मौजूद नहीं है, तो आपको आह्वान करने -setView:
से पहले या तो कॉल करना होगा -view
, या -loadView
अपने विचारों को प्रोग्रामेटिक रूप से सेट करने की विधि को ओवरराइड करना चाहिए ।
आशा है कि इससे मदद मिली। धन्यवाद।
अद्यतन - जैसा कि @ThomasW ने टिप्पणी के अंदर बताया है viewWillLayoutSubviews
और viewDidLayoutSubviews
अन्य समय पर भी बुलाया जाएगा जब मुख्य दृश्य के साक्षात्कार लोड किए जाते हैं, उदाहरण के लिए जब तालिका दृश्य या संग्रह दृश्य के सेल लोड किए जाते हैं।
अद्यतन - जैसा कि @ मारी ने टिप्पणी के अंदर बताया loadView
था , का विवरण अपडेट किया गया था