7

कोड 2 दृश्य नियंत्रकों के बीच माता-पिता/बच्चे का रिश्ता मूल रूप से यह सिर्फ मामले की तरह कुछ कर रहा है से बनाने के लिए बनाने के लिए कैसे:इंटरफ़ेस बिल्डर में एक कंटेनर/बच्चे ViewController संबंध

[self addChildViewController:childViewController]; 
[self.view addSubview:childViewController.view]; 

जहां स्वयं है अभिभावक दृश्य नियंत्रक।
लेकिन, क्या होगा यदि मैं इंटरफेस बिल्डर से पूरी तरह से एक ही रिश्ता बनाना चाहता हूं?
या दूसरे शब्दों में: इंटरफ़ेस बिल्डर का उपयोग कर विधि addChildViewController के व्यवहार को फिर से बनाने का कोई तरीका है?
मुझे लगता है कि के बारे में दस्तावेज़ का एक बहुत नहीं मिला, यहाँ विषय के बारे में एक पुराने अनसुलझे पोस्ट है: https://devforums.apple.com/message/455758#455758

ठीक से addChildViewController संबंध स्थापित करने के बिना, रोटेशन के तरीकों में से कोई भी अपने बच्चे को देखने के लिए नियंत्रक को भेजा जाता है , यहां मेरा प्रश्न कहां से आया है।

  1. खींचें और "वस्तुओं" पहचान निरीक्षक में पैनल
  2. में "वस्तु लाइब्रेरी" पैनल से एक "दृश्य नियंत्रक" वस्तु गिरा:

    यह मैं आईबी में क्या किया है है मैं अपने UIViewController उपवर्ग ("आइटम देखें नियंत्रक")

  3. नियंत्रक
  4. नियंत्रक करने के लिए सभी अन्य आवश्यक दुकानों जुड़े (सूची का नाम, टेबल देखें)
  5. को देखने के आउटलेट जुड़े करने के लिए अपने वर्ग बदल दिया है

तस्वीर में पहली "देखें" ऑब्जेक्ट मेरे मूल दृश्य नियंत्रक का दृश्य है, इसके बजाय हाइलाइट किया गया "व्यू" बच्चे दृश्य नियंत्रक ("आइटम व्यू कंट्रोलर") का दृश्य है।

enter image description here

कंटेनर नियंत्रक भी एक अतिरिक्त IBOutlet के माध्यम से अपने बच्चे को उदाहरण बनाए रखें:

@property (nonatomic, strong) IBOutlet ItemsViewController *itemsViewController; 

धन्यवाद


अद्यतन 1: मैं मैन्युअल रूप से माता पिता/बच्चे को सेट करते हैं दृश्य में रिश्ते कंटेनर नियंत्रक के डिडलोड, सभी रोटेशन विधियां सही तरीके से हैं बच्चे को भेजा गया।

[self addChildViewController:self.itemsViewController]; 

लेकिन मैं वास्तव में, अगर यह है कि ऐसा करने का सही तरीका क्या है पता नहीं है के बाद से मैं सभी आईबी का उपयोग कर करना चाहते हैं।


अद्यतन 2: धन्यवाद उसके संकेत "कंटेनर देखें" वस्तु पुस्तकालय में उपयोग करने के लिए के लिए @micantox लिए, मैं एक स्टोरीबोर्ड में मेरी xib फ़ाइल परिवर्तित कर दिया है और अब बच्चे दृश्य नियंत्रक में जोड़ा जाता है इसके माता-पिता, इसलिए मुझे इसे कोड से मैन्युअल रूप से addChildViewController के साथ जोड़ना नहीं है और रोटेशन विधियों को अपेक्षित के रूप में अग्रेषित किया जाता है।
"कंटेनर देखें" मूल रूप से एम्बेड segue लागू करता है और iOS 6
से केवल समर्थित है यह मेरा स्टोरीबोर्ड से एक अद्यतन स्क्रीनशॉट:

enter image description here

उत्तर

18

बच्चे के लिए कंटेनर दृश्य बनाने के लिए सही रास्ता ऑब्जेक्ट लाइब्रेरी में ऑब्जेक्ट "कंटेनर व्यू" के उपयोग के माध्यम से नियंत्रक देखें। अपने दृश्य नियंत्रक दृश्य में एक खींच कि जनक दृश्य नियंत्रक से अलग से नियंत्रित किया जा सकता बच्चे दृश्य नियंत्रक के लिए एक नया दृश्य पैदा करेगा।

+0

मैं कंटेनर दृश्य नियंत्रक क्या जानते से केवल iPhone [कड़ी] (http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html पर iPad करने के लिए, लेकिन यह भी उपलब्ध सीमित नहीं है), मैंने इसे एक से अधिक ऐप में उपयोग किया है। इस मामले में मैं इसे आईपैड पर करना चाहता हूं। – ggould75

+0

वैसे भी, इंटरफ़ेस बिल्डर में ऐसा करने का तरीका ऑब्जेक्ट लाइब्रेरी में कंटेनर व्यू ऑब्जेक्ट के माध्यम से है! इससे आपको अपने बच्चे को कंट्रोलर के दृश्य को अलग से प्रबंधित करने की सुविधा मिल जाएगी – micantox

+0

धन्यवाद, मुझे इस ऑब्जेक्ट का अस्तित्व पता नहीं था, असल में मैं स्टोरीबोर्ड के बजाए एक xib फ़ाइल के साथ काम कर रहा हूं, और ऐसा लगता है कि स्टोरीबोर्ड पर ही उपलब्ध है । मैं इसे आजमा रहा हूं ... – ggould75

2

इसके अलावा, यदि आप अपने स्टोरीबोर्ड में किसी मौजूदा व्यू कंट्रोलर को एम्बेड सेगू बनाने की कोशिश कर रहे हैं, तो कंटेनर व्यू से कंट्रोल-ड्रैग करें, कंटेनर वीसी नहीं, वीसी में जिसे आप एम्बेड करना चाहते हैं।

0

यह करने के लिए बस अपने स्टोरीबोर्ड ID का संदर्भ द्वारा बच्चे को देखने के लिए नियंत्रक का दृष्टांत है एक बहुत ही सरल तरीका:

UITableViewController *childViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"childViewController"]; 

[self addChildViewController:childViewController]; 
[self.view addSubview:childViewController.view]; 

इस तरह, आप इंटरफ़ेस बिल्डर में दोनों दृश्य नियंत्रक बना सकते हैं। आप इंटरफ़ेस बिल्डर में स्टोरीबोर्ड आईडी सेट कर सकते हैं: व्यू कंट्रोलर का चयन करें और आप पहचान निरीक्षक में इसके लिए एक फ़ील्ड देखेंगे।

संबंधित मुद्दे