25

यदि आप इस Apple Developer Page पर थोड़ा सा स्क्रॉल करते हैं तो आपको "वैकल्पिक लैंडस्केप इंटरफेस बनाना" अनुभाग मिलेगा। वर्णित मूल दृष्टिकोण एक अलग एनआईबी फ़ाइल को मॉडरेट व्यू के रूप में प्रस्तुत करना है जब अभिविन्यास में परिवर्तन होता है। मैं स्टोरीबोर्ड सुविधा का उपयोग कर रहा हूं, इसलिए मेरे पास एनआईबी नहीं है। मैं उस मामले में एक अलग "दृश्य" कैसे लोड करूं?आईफोन स्टोरीबोर्ड: पोर्ट्रेट और लैंडस्केप के लिए अलग-अलग दृश्य

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

उत्तर

19

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

+1

दिलचस्प दृष्टिकोण। कोशिश करेंगे। धन्यवाद – Korbi

+5

यदि आप IBOutlets का उपयोग करते हैं, तो उन्हें केवल एक ही दृश्य में ही असाइन किया जा सकता है। – Paranaix

+1

@Paranaix मैं आपकी टिप्पणी पूरी तरह से समझ नहीं सकता। मूल प्रश्न में लैंडस्केप और पोर्ट्रेट मोड के लिए अलग-अलग इंटरफेस रखने की आवश्यकता होती है। यदि आप एक ही इंटरफ़ेस के लिए एक अलग लेआउट की तलाश में हैं जो एक अलग समस्या है। शायद आपको एक बिल्कुल नया सवाल उठाना चाहिए। –

2

आप एक नेविगेशन नियंत्रक और एक मुख्य दृश्य सेट कर सकते हैं। फिर आप पोर्ट्रेट और लैंडस्केप लेआउट (2 अतिरिक्त दृश्य) के लिए टेम्पलेट दृश्य का उपयोग कर सकते हैं।

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

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

रूट व्यू कंट्रोलर कार्यान्वयन में मूल तर्क को पोर्ट्रेट की जांच करने की आवश्यकता होगी और इसके आधार पर आप पहचानकर्ता के आधार पर सही दृश्य लोड करना चाहेंगे।

इस अवधारणा के साथ प्रयोग करें और देखें कि यह आपके लिए काम करता है या नहीं। अद्वितीय नियंत्रण के साथ दो अलग-अलग विचारों का उपयोग न करने के मुख्य लाभ (समान टैग के साथ साझा दृष्टिकोण नहीं) यह है कि आप अपने मूल सबव्यूज़ तक पहुंच बनाए रखते हैं। आपके व्यू कंट्रोलर में परिभाषित कोई भी इंस्टेंस वेरिएबल जो दायर किए गए टेक्स्ट, लेबल इत्यादि को इंगित करता है ... इस पर ध्यान दिए बिना कि टेम्पलेट व्यू का उपयोग क्यों किया जाता है। यह मॉडल संरचना, दृश्य, नियंत्रक दृष्टिकोण को बनाए रखता है क्योंकि डेटा संरचना अपरिवर्तित बनी हुई है।

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

उम्मीद है कि इससे कुछ मदद मिलती है।

0

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

तो अगर आप कई viewcontrollers वाला स्टोरीबोर्ड है, तो आप दो संभावना (पोर्ट्रेट या लैंडस्केप दृश्य) केवल viewcontrollers कि आप ओरिएंटेशन बदलने के लिए रुचि रखते हैं में सेट कर सकते हैं।

मैं इस समाधान का इस्तेमाल किया और बहुत ठीक काम करते हैं!

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