2009-11-17 11 views
9

के साथ कस्टम क्लासेस/एक्सआईबी कास्टिंग मैं इसे जितना छोटा कर सकता हूं इसे बनाने की कोशिश करूंगा।इंटरफेस बिल्डर

मैंने एक कस्टम क्लास लिखा जो UIView को कुछ आईबीओटलेट गुणों के साथ बढ़ाता है, और इसमें एक एक्सआईबी है जो उन आईबीओटलेट से जुड़े हुए हैं।

मैं उस कक्षा को लेना चाहता हूं, इसे किसी अन्य XIB (उदाहरण के लिए, एक टेबल सेल) में एम्बेड करें, और बस इसे काम करें।

ऐसा लगता है कि जब मैं नए एक्सआईबी में उस कस्टम क्लास को एम्बेड करता हूं, तो यह मूल XIB I से जुड़ा हुआ नहीं है, इसलिए यह मुझे नए XIB पर इंटरफ़ेस तत्वों को इंटरफ़ेस करने के लिए आईबीऑटलेट को रीसेट करने के लिए कहता है। यह अपाहिज है।

क्या कोई समझता है कि मैं क्या करने की कोशिश कर रहा हूं और एक अच्छा दृष्टिकोण है?

उत्तर

8

यहाँ कैसे मैं इस काम करने में कामयाब रहे है

  • एक UIView जगह है जहाँ आप चाहते हैं परिभाषित करने के लिए जोड़े अपने प्रदर्शित करने के लिए आंतरिक निब।
  • लाइब्रेरी से UIViewController ऑब्जेक्ट जोड़ें, अपनी निब नाम संपत्ति को अपनी आंतरिक निब फ़ाइल (एक्सटेंशन के बिना) के नाम पर सेट करें।
  • अपने बाहरी दृश्य नियंत्रक में इन दो वस्तुओं के लिए IBOutlets बनाएं और उन्हें तार दें। (मैं innerView और innerViewController के रूप में उन्हें का उल्लेख होगा।)
  • IBOutlets अपने बाहरी निब फ़ाइल में कुछ भी करने के लिए अपने भीतर के दृश्य नियंत्रक में निर्धारित किसी भी कनेक्ट न करें, बस उन्हें असंबद्ध छोड़ दें। ,

    [self.innerView addSubview:self.innerViewController.view]; 
    self.innerViewController.view.frame = CGRectMake(0, 0, self.innerView.frame.size.width, self.innerView.frame.size.height); 
    

    अपने बाहरी निब एक कस्टम UITableViewCell है अपने awakeFromNib में उन पंक्तियों डाल:

Xcode में
अपने बाहरी दृश्य नियंत्रक के viewDidLoad विधि में, इन दो पंक्तियों को जोड़ने इसके बजाय
विधि।

& चलाएं!

+0

यह ओएस एक्स पर उसी तरह काम करता है, बस यूआई कक्षाओं को उनके एनएस समकक्षों के साथ प्रतिस्थापित करें। – Mark

1

मुझे लगता है कि आप बस UIViewController द्वारा उपयोग के लिए एक निब में UIViews डाल रहे हैं जो पूरी तरह से कोड में है। ऐप्पल इसे detached nib file कहते हैं।

विवरण के लिए लिंक की गई मार्गदर्शिका का पालन करें और इसे काम करने के तरीके के उदाहरण के लिए देखें।

इंटरफ़ेस बिल्डर में किसी अन्य के अंदर एक दृश्य एम्बेड करने के संबंध में, आपको मूल दृश्य में add a UIView element from the Library और set its class in the Inspector की आवश्यकता है। एक बार एम्बेडेड दृश्य की कक्षा सेट हो जाने के बाद, आपके आईबीओलेट्स दिखाई दे सकते हैं।

इंटरफ़ेस बिल्डर में
अपने बाहरी निब खोलें और ऐसा करने के:

+1

वह पहला वाक्य बिल्कुल नहीं है जो मैं कर रहा हूं। कक्षा स्वयं एक UIView है, और इसमें UIImageView और UIActivityIndicator शामिल है। वह अंतिम वाक्य सही है, लेकिन दुर्भाग्य से यह सही ढंग से व्यवहार नहीं करता है। यह आईबीओटलेट्स को जैक करता है। –

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