हाँ, अपने माता पिता के नियंत्रक आम तौर पर, इसके अलावा और बच्चे नियंत्रक को हटाने को नियंत्रित करना चाहिए ताकि आपके दूसरा दृष्टिकोण अधिक लागू लगता है। UIViewController क्लास संदर्भ के Implementing a Container View Controller अनुभाग देखें।
मैं तुम्हें दूर अपने पूर्व दृष्टिकोण, जहां बच्चे अपने आप को हटा रहा है के साथ मिल सकता है संदेह है, लेकिन एप्पल अपने दस्तावेज में संगत है और Implementing UIViewController Containment पर WWDC 2011 सत्र का कहना है कि कंटेनर नियंत्रक बच्चों के प्रबंधन के लिए जिम्मेदारी भालू।
तो, आपके बच्चे के माता-पिता को यह सूचित करने के जवाब में कि कैसे हटा दिया गया है, उसके लिए कोई स्थापित प्रोटोकॉल नहीं है। लेकिन यह असुरक्षित है क्योंकि यह माना जाता है कि माता-पिता इस प्रक्रिया को शुरू करेंगे। और इस हद तक कि एक बच्चे को इस प्रक्रिया को शुरू करने की आवश्यकता है, दस्तावेज़ीकरण से पता चलता है कि माता-पिता को बाल नियंत्रकों के प्रबंधन के लिए सार्वजनिक एपीआई होना चाहिए।
इसलिए माता-पिता को सूचित करने वाले बच्चे के लिए कोई प्रोटोकॉल नहीं है, हालांकि, एक प्रकाशित एपीआई है जिसके द्वारा अभिभावक नियंत्रक बच्चों को सूचित करते हैं कि उन्हें स्थानांतरित/हटा दिया गया है। विशेष रूप से, जब अभिभावक नियंत्रक किसी बच्चे को हटा रहा है, तो उसे willMoveToParentViewController
पर कॉल करना चाहिए। This documentation स्पष्ट रूप से कहते हैं कि हम इस अधिसूचना प्रदर्शन करना होगा:
आप अपने खुद के कंटेनर दृश्य नियंत्रक को लागू कर रहे हैं, यह removeFromParentViewController
विधि कॉल करने से पहले बच्चे को देखने के लिए नियंत्रक के willMoveToParentViewController:
विधि कॉल करना होगा ...
इस प्रकार, के रूप में देखें नियंत्रक प्रोग्रामिंग गाइड के Adding and Removing a Child भाग में चर्चा की, जब एक बच्चे, हम चाहिए को हटाने:
[childVC willMoveToParentViewController:nil];
[childVC.view removeFromSuperview];
[childVC removeFromParentViewController];
अनजाने में, didMoveToParentViewController
के लिए प्रलेखन समान रूप से स्पष्ट है: जब आप एक बच्चे नियंत्रक जोड़ते हैं, तो आपको एनीमेशन/संक्रमण (यदि कोई हो) होने पर didMoveToParentViewController
पर कॉल करना होगा। मुझे नहीं पता कि क्या होगा यदि हमने इन दो अधिसूचना विधियों को नहीं बुलाया, लेकिन ऐप्पल का कहना है कि हमें ऐसा करना चाहिए और इसलिए ऐसा करना समझदार है।
इसका कारण एक शुद्ध कंटेनर के रूप में वीसी (देखें नियंत्रक) कंटेनर का उपयोग है, इसमें कोई विचार नहीं है। बच्चे के कंटेनर के विचारों में उनके संबंधित कार्यक्रम होते हैं; इसलिए बच्चे वीसी (जैसे एक पूरा करने वाला बटन दबाकर) में कार्रवाई बच्चे वीसी की रिहाई को निर्धारित करती है। – Roddy
उत्तर देने के लिए बहुत धन्यवाद, यह वास्तव में जो कुछ मैं पढ़ रहा हूं उसे स्पष्ट करने में मदद करता हूं। – Roddy
रॉब, क्या आपको पता है कि क्या होगाMoveToParentViewController: यदि आप अपने बच्चे के दृश्य नियंत्रक में उस विधि को ओवरराइड नहीं कर रहे हैं तो वास्तव में आवश्यक है? ऐप्पल के दस्तावेज़ इसे ध्वनि बनाते हैं जैसे आप इसे कॉल करना चाहते हैं, लेकिन अगर आप इसे अपने बच्चे में ओवरराइड नहीं करते हैं तो मैं यह नहीं समझ सकता कि यह वास्तव में कुछ भी करता है। अगर मैं उस विधि को नहीं बुलाता तो मुझे कोई समस्या नहीं आई है। – rdelmar