2010-10-07 10 views
5

हुए एम्बेड मैं एक आइकन दृश्य के लिए एक XIB पैदा की है कहो। मैं तो संदर्भ द्वारा इस आइकन को देखने के उदाहरण के एक नंबर एम्बेड करने के लिए एक अलग XIB कंटेनर दृश्य में चाहता हूं, इसलिए अगर मैं विशेषताओं को परिवर्तित/मूल आइकन दृश्य XIB में लेआउट, कंटेनर दृश्य XIB में उदाहरणों में ये परिवर्तन दिखाई ।नेस्टिंग XIBs/संदर्भ

अनिवार्य रूप से, संदर्भ हुए एम्बेड।

शायद मैं घना हो रहा हूं, लेकिन ऐसा लगता है कि एक कंटेनर व्यू में दृश्य खींचते समय इंटरफ़ेस बिल्डर का डिफ़ॉल्ट व्यवहार मूल XIB को संदर्भित करने के बजाय सब कुछ कॉपी करना है? और आइकन दृश्य से जुड़े वर्ग के उदाहरण को कंटेनर व्यू में खींचकर केवल रिक्त दृश्य में परिणाम मिलता है।

मैं वहाँ यह करने के लिए एक रास्ता है यकीन है, लेकिन मैं अगर मैं यह पता लगा सकते हैं शापित कर रहा हूँ। मैं सामान्य रूप से प्लेग की तरह आईबी से बचने के;)

उत्तर

5

वहाँ इंटरफ़ेस बिल्डर में सीधे ऐसा करने का एक तरीका नहीं है। मुझे अपने आखिरी ऐप में ऐसा कुछ करने की ज़रूरत थी। मैंने जो किया वह बस प्लेसहोल्डर को उस स्थान पर देखें जहां आप अपना संदर्भित xib चाहते हैं और फिर अपने दृश्य में डिडलोड या व्यूविल्लएपर, आदि, आप उस xib को लोड करते हैं और उस प्लेड व्यू को अपने प्लेसहोल्डर व्यू के बच्चे के रूप में रखें।

NSArray *views = [[NSBundle mainBundle] loadNibNamed: @"ReferencedView" owner: self options: nil]; 
UIView *referencedView = (UIView *)[views objectAtIndex:0]; 
[self.viewPlaceholder addSubview:referencedView]; 

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

सूचना है कि अब iOS 5 में वे पहले से ही containerView है:

0

इस तरह मैंने किया है। मुझे पता है कि यह एक्सआईबी में दिखाई नहीं देता है। हालांकि, सार वही है।

एक दृश्य है, और है कि ContainerView कहते हैं। यदि आप इसे XIB शैली करते हैं तो आपको कुछ सामान मैन्युअल रूप से सेट करने की आवश्यकता होती है] बच्चे को नियंत्रक देखें, इसे माता-पिता में जोड़कर और माता-पिता के दृश्य में दृश्य जोड़ना।

आपको स्टोरीबोर्ड में ऐसा है, तो आप कुछ अन्य नियंत्रक करने के लिए कि ContainerView से लिंक और एक एम्बेड segue बना सकते हैं। हालांकि, यह केवल एक दृश्य नियंत्रक के लिए काम करता है और आपको बाकी के लिए भी इसकी आवश्यकता होती है।

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

    PO(self.childViewControllers); 
    BGCRListBusinessViewController * theListController= [[BGCRListBusinessViewController alloc]init]; 
    self.listBusinessViewController = theListController; 
    [self addChildViewController:theListController]; 
... 
    for (UIViewController * child in self.childViewControllers) { 
     child.view.frame=self.ContainerView.bounds; 

    } 
    //PO(self.ChangeFilter.BackgroundImage); 
    //PO 
    //self.ChangeFilter setBackgroundImage:[UIImage imageNamed:@] forState:<#(UIControlState)#> 

    [self.ContainerView addSubview:self.listBusinessViewController.view];// initialize' 
} 

टाडा ....

अब जब कि childViewControllers संग्रह को देखने के:

तो मैं यह करते हैं। आईओएस 5 में वह नया है। यह सब करता है, ViewWillAppear को पास करना है, देखें WillDisappear, ViewDidThisandhat, और ViewIamRotatingWillOrDidor जो भी हो। यह उससे थोड़ा अधिक करता है लेकिन मुझे परवाह नहीं है।

तो अगर आप IOS4 के लिए लक्ष्य, तो आप सिर्फ उन सभी सीधे माता पिता viewWillAppear, viewWillDisappear, ViewDidThisandThat, और ViewIamRotatingWillOrDidorWhatever में क्रमश: कॉल कर सकते हैं।

मेरे कार्यान्वयन में मेरे पास कोई भी संकेतक है जो नियंत्रक के पास कंटेनर व्यू के अंदर दृश्य है। ऐसे विचार उन सभी व्यूविल्लरडिड को प्राप्त करेंगे जो कुछ भी कहा जाता है।

मेरे माता-पिता नियंत्रक के कई बच्चे भी हैं। जिनमें से अधिकांश नहीं देखा जाता है। कोई बात नहीं। जिन बच्चों को नहीं देखा जाता है उन्हें ViewWillorDid भी नहीं मिलेगा।

यह स्वचालित रूप से childViewControllers द्वारा किया जाता है। यदि आप आईओएस 4 का लक्ष्य रखते हैं, तो अपने सभी बच्चों को नियंत्रकों के दृश्य को देखें और देखें कि उनमें से कोई भी प्रदर्शित होता है या नहीं। यदि प्रदर्शित होता है तो उनके ViewWillorDid को भी कॉल करें।

कुछ अतिरिक्त प्रतिनिधि भी हैं जो यह सूचित करते हैं कि कोई बच्चा माता-पिता या जो कुछ भी जोड़ा जाता है या नहीं। मैंने इसका उपयोग नहीं किया और यह नहीं पता कि इसका क्या उपयोग किया जाता है।

अंततः कुछ दृश्य बर्खास्त करना चाहते हैं। माता-पिता को ऐसा करना चाहिए। मैं अधिसूचना के साथ पूरा करता हूं। लेकिन यह पहले से ही सवाल से परे है। आईओएस में पहले से ही modalViewController के लिए ऐसा फ़ंक्शन है।

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