2015-08-23 9 views
14

मेरे पास एक कंटेनर व्यू के साथ UIViewController के साथ स्टोरीबोर्ड सेटअप है ताकि मैं इसके अंदर UIViewController एम्बेड कर सकूं।प्रोग्रामिंग के रूप में UIViewController एम्बेड करें?

एक निश्चित परिदृश्य में मुझे एम्बेडेड व्यू कंट्रोलर को बदलने की जरूरत है। मेरे स्टोरीबोर्ड में मेरे कंटेनर व्यू से केवल दो segues नहीं हो सकते हैं (केवल एक ही एम्बेड segue)। जो मुझे प्रोग्रामिक रूप से करने के लिए प्रेरित करता है।

मेरे पास मेरे स्टोरीबोर्ड में कोई कंटेनर दृश्य नहीं है जिसमें कोई कनेक्टेड एम्बेड सेगू नहीं है।

अब इस बिंदु से, मैं अपने चुने हुए UIViewController ऑब्जेक्ट को प्रोग्रामेटिक रूप से कैसे एम्बेड कर सकता हूं?

उत्तर

23

आप प्रोग्राम के रूप में ऐसा कर सकते हैं, नीचे दी गई विधि जो निर्णय जो देखने नियंत्रक कंटेनर दृश्य में जोड़ा जाना चाहिए बनाने के लिए एक bool मूल्य ले जाएगा और फिर एक वस्तु का दृष्टांत जाएगा और उसके बाद containerView

में जोड़ देगा
- (void)addViewControllerToContainerView:(BOOL)addVC1 
{ 
// Get storyboard 
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"<name of storyboard>" bundle:[NSBundle mainBundle]]; 
    UIViewController *viewController = nil; 
    if (addVC1) 
    { 
// get viewController with identifier 
     viewController = [storyBoard instantiateViewControllerWithIdentifier:@"<View Controller 1 Identifier>"]; 
    } 
    else 
    { 
     viewController = [storyBoard instantiateViewControllerWithIdentifier:@"<View Controller 2 Identifier>"]; 
    } 
// lets add it to container view 
    [viewController willMoveToParentViewController:self]; 
    [self.view addSubview:viewController.view]; 
    [self addChildViewController:viewController]; 
    [viewController didMoveToParentViewController:self]; 
// keep reference of viewController which may be useful when you need to remove it from container view, lets consider you have a property name as containerViewController 
    self.containerViewController = viewController; 
} 

आप कंटेनर दृश्य नियंत्रक से देखने नियंत्रक को हटाने की जरूरत है जब आप इस

[self.containerViewController willMoveToParentViewController:nil]; // 1 
    self.containerViewController.view removeFromSuperView]; 
    [self.containerViewController removeFromParentViewController];//this line is updated as view is removed from parent view cotnroller istead of its viewcontroller is removed from parentViewController 
    self.containerViewController = nil 

कंटेनर दृश्य नियंत्रकों के बारे में क्या कर सकते हैं Apple docs

+0

व्यापक उत्तर के लिए धन्यवाद। दुर्भाग्य से यह काफी काम नहीं करता जैसा मैंने कल्पना की थी। सबसे पहले, मुझे रूट 'UIViewController' के 'UIView' के अंदर 'UIViewController' सक्षम करने की आवश्यकता है। यह पूरे विचार को भरता है। दूसरा, अगर मैं इसे 'UIView' (पूरे वीसी व्यू के बजाय) के सबव्यूव के रूप में जोड़ता हूं, तो यह ऑटो लेआउट बाधाओं के अनुरूप नहीं है जैसे कि यह स्टोरीबोर्ड से एम्बेडेड होगा। –

+0

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

+0

मैंने सेब डॉक्स से लिंक जोड़ा है जो वर्णन करता है कि कैसे कंटेनर व्यू कंट्रोलर –

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