WWDC 2011 सत्र 102 में, एप्पल शुरू की दृश्य नियंत्रक नियंत्रण है, जो कस्टम दृश्य नियंत्रक कंटेनर बनाने की क्षमता, के अनुरूप है UITabBarController
, UINavigationController
और पसंद है।
मैंने कई बार उदाहरण देखे। इस पद्धति से जुड़े तरीकों की एक हड़बड़ी है, लेकिन उन्हें समझ पाना थोड़ा कठिन था। मैं यहां पोस्ट कर रहा हूं जो मुझे लगता है कि चल रहा है और देखें कि क्या समुदाय मेरे संदेह की पुष्टि या विवेचना करेगा।
परिदृश्य 1: बिना माता-पिता से नए माता-पिता के दृश्य नियंत्रक के आगे बढ़ना
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view]; // or something like this.
[vc didMoveToParentViewController:self];
क्या पहले दो पंक्तियों को दिए गए क्रम में होना चाहिए, या क्या वे उलट हो सकते हैं?
परिदृश्य 2: किसी पैरेंट व्यू कंट्रोलर से नो पेरेंट व्यू कंट्रोलर में जाना
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
क्या कॉल करना भी आवश्यक है [vc didMoveToParentViewController:nil]
? सत्र 102 में उदाहरणों ने इस परिदृश्य में ऐसा नहीं किया , लेकिन मुझे नहीं पता कि यह एक चूक थी या नहीं।
परिदृश्य 3: एक पैरेंट व्यू कंट्रोलर से दूसरे में ले जाना
यह संभवतः निम्नलिखित तरीके से घटित होगा, क्योंकि प्रत्येक अभिभावक दृश्य नियंत्रक में तर्क को समझाया जाएगा।
// In the old parent
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
// In the new parent
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
[vc didMoveToParentViewController:self];
प्रशन
मेरा मुख्य प्रश्न यह है: क्या यह है कि नियंत्रक नियंत्रक को सामान्य रूप से कैसे काम करना चाहिए? क्या मैकेनिक्स ऊपर दिए गए सही हैं?
क्या कॉल करने willMoveToParentViewController
से पहले कॉल करना आवश्यक है addChildViewController
? यह मेरे लिए तार्किक आदेश जैसा लगता है, लेकिन क्या यह कड़ाई से आवश्यक है?
क्या कॉल करने के didMoveToParentViewController:nil
बाद कॉल करना आवश्यक है removeFromParentViewController
?
addChildViewController
संतुलित होना चाहिएdidMoveToParentViewController
औरwillMoveToParentViewController
इसके साथ संतुलित होना चाहिएremoveFromParentViewController
। यही वह है जिसकी तलाश में मैं हूं। निश्चित नहीं कि मैंने इसे डॉक्स में कैसे याद किया।