2012-12-27 28 views
10

मेरे पास "कंटेनर" व्यू कंट्रोलर है, जिसमें स्टोरीबोर्ड का उपयोग करके कुछ कंटेनर दृश्य हैं। उस कंटेनर व्यू में से प्रत्येक में एक एम्बेडेड व्यू कंट्रोलर के दृश्य का एक लिंक है।स्टोरीबोर्ड में कंटेनर व्यू में UIViewController xib लोड हो रहा है

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

मतलब, स्टोरीबोर्ड में उन्हें रखने के बजाय प्रत्येक व्यू कंट्रोलर के लिए .xib फ़ाइलों को बनाना, और उन्हें स्टोरीबोर्ड में कंटेनर दृश्यों से लिंक करना।

धन्यवाद,

उत्तर

5

हाँ, आप कर सकते हैं। कुछ अवलोकन:

  1. आपको केवल इतना करना है कि हम एनआईबी का उपयोग करते समय उपयोग किए जाने वाले कोड के प्रकार को डालें। कंटेनर के मामले में, इसका मतलब है the typical container methods। यदि आपने कोड के माध्यम से रोकथाम नहीं किया है, तो में Creating Custom Container View Controllers देखें नियंत्रक प्रोग्रामिंग मार्गदर्शिका देखें। नीचे की रेखा, जैसा कि आप एक गैर-स्टोरीबोर्ड दृश्य में संक्रमण करते हैं (या एक गैर-स्टोरीबोर्ड बाल दृश्य नियंत्रक जोड़ें), बस इसे हमेशा कोड करें जैसे कि आप हमेशा एनआईबी-आधारित वातावरण में उपयोग करते हैं। आप स्टोरीबोर्ड में इस एनआईबी-आधारित दृश्य का प्रतिनिधित्व नहीं कर सकते हैं। लेकिन तुम सिर्फ नियंत्रक की तरह आप हमेशा महत्वपूर्ण व्यक्ति के साथ क्या मिलता है:

    SecondViewController *controller = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 
    
  2. आप स्पष्ट रूप से स्टोरीबोर्ड उपयोग कर के लाभ के कई खो (जैसे माता-पिता दृश्य में कंटेनर दृश्य के आधार पर बच्चे के दृश्य आकार), लेकिन आप एक एनआईबी पर्यावरण में से भी बदतर नहीं हैं। लेकिन आपके प्रश्न के जवाब में कि क्या आप उन्हें "स्टोरीबोर्ड में कंटेनर दृश्यों से जोड़ सकते हैं", आप स्टोरीबोर्ड में इस संबंध का प्रतिनिधित्व नहीं कर सकते हैं, बल्कि आप उन्हें प्रोग्रामेटिक रूप से लिंक करते हैं।

  3. यदि आपकी अलग टीम एकल-दृश्य वातावरण में काम कर रही हैं, तो आप इस एनआईबी दृष्टिकोण का उपयोग कर सकते हैं। आपको विचार करना चाहिए, हालांकि, केवल कई स्टोरीबोर्ड हैं, प्रत्येक लॉजिकल टीम के लिए एक। आपको अभी भी कोड का सहारा लेना होगा क्योंकि आप स्टोरीबोर्ड के बीच संक्रमण करते हैं, जैसा कि आप इस एनआईबी दृष्टिकोण में करते हैं, लेकिन यदि आपकी टीमों में से एक के पास सौदा करने के लिए कई दृश्य हैं, तो वे परियोजना के अपने हिस्से के भीतर स्टोरीबोर्ड लाभ का आनंद ले सकते हैं। आप अगले स्टोरीबोर्ड में पहला दृश्य करने के लिए प्राप्त करना चाहते हैं, तो आप कर सकते हैं:

    UIStoryboard *secondaryStoryboard = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil]; 
    SecondViewController *controller = [secondaryStoryboard instantiateInitialViewController]; 
    
  4. अपने बच्चे को अपने स्टोरीबोर्ड पर एक नया दृश्य में संक्रमण के लिए की जरूरत है, मैं यह करने के लिए अपने खुद के parentStoryboard संपत्ति जोड़ने के लिए उपयोगी पाते हैं मेरे बच्चे नियंत्रक, जो तब उपयोगी हो सकता है यदि आपको instantiateViewControllerWithIdentifier जैसे कुछ करने की आवश्यकता है। जाहिर है, यदि आप नए नियंत्रकों में संक्रमण नहीं कर रहे हैं, तो आपको ऐसा करने की आवश्यकता नहीं हो सकती है, लेकिन यदि आप हैं, तो UIStoryboard संपत्ति उपयोगी हो सकती है।

+0

धन्यवाद रॉब, मैं पहले से ही रोकथाम के साथ काम कर रहा हूं, और मैंने इस परियोजना में इसका उपयोग करने की कोशिश की - यह ठीक काम करता है, लेकिन मैं सोच रहा था कि "दोनों दुनिया का आनंद लेने" का कोई तरीका है, लेकिन ऐसा लगता है कि यह असंभव है। स्टोरीबोर्ड स्वचालित रूप से मेरे बच्चे को कंट्रोलर को बच्चों के रूप में बनाता है जो बहुत अच्छा है। वैसे भी, आपने जो 3,4 में लिखा था वह बहुत ही रोचक और बीमार है। – Lirik

+0

@ लिरोनके हाँ, मुझे वह मिलता है जो आप करना चाहते थे, लेकिन यदि आपके पास एकाधिक स्टोरीबोर्ड (और/या एनआईबी) हैं, तो आप स्टोरीबोर्ड लाभों में से कुछ खो देते हैं। मुझे नहीं लगता कि आप स्टोरीबोर्ड या स्टोरीबोर्ड और एनआईबी के बीच सीगू कर सकते हैं। आपको कोड में ऐसा करना होगा, मुझे डर है। माफ़ कीजिये। – Rob

12

आप एक अलग xib में आपके विचार नियंत्रक लेआउट स्थानांतरित कर सकते हैं। जैसा कि आप कहते हैं, स्टोरीबोर्ड पर लेआउट साझा करने का यह एक सुविधाजनक तरीका है।

अपने स्टोरीबोर्ड में एक कंटेनर दृश्य सेट करते समय, सुनिश्चित करें कि आप एम्बेडेड व्यू कंट्रोलर में प्रदत्त दृश्य को हटा दें।ViewController के लिए कस्टम क्लास को अपने क्लास नाम पर सेट करें। कक्षा से मेल खाने के लिए xib नाम दें (उदाहरण के लिए FooViewController.xib ताकि यह पाया जा सके कि FooViewController.m लोड हो गया है।)

यदि आप स्टोरीबोर्ड व्यू कंट्रोलर लेआउट में दृश्य को नहीं हटाते हैं, तो आप उसे खाली देखेंगे इसके बजाय देखें। आपके व्यू कंट्रोलर में आपकी viewDidLoad विधि नहीं कहा जाएगा, क्योंकि व्यू डिफ़ॉल्ट स्टोरीबोर्ड व्यू है।

मैं प्री-आईओएस 7 प्रोजेक्ट पर आईओएस 8 के लिए एक्सकोड 6.1 का उपयोग कर रहा हूं।

+0

धन्यवाद! तुम मेरा दिन बचाओ! – Cleversou

+1

यह सही जवाब होना चाहिए। एनआईबी से बाल दृश्य नियंत्रक को एम्बेड करने के लिए एक स्टोरीबोर्ड-केवल दृष्टिकोण। उत्तम। धन्यवाद। –