6

मुझे हाल ही में पता चला है कि UIView एस में केवल UIViewController एस होनी चाहिए जब वे पूरी विंडो भरें (या UIViewController जैसे UINavigationController या UISplitViewController द्वारा प्रबंधित की जाती हैं)। यह उद्धरण UIViewController के लिए प्रलेखन से है:तर्क को UIView में जाना चाहिए या (जब लागू हो) इसके UIViewController को देखना चाहिए?

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

मैं आमतौर पर UIView में अपना दृश्य तर्क डालता हूं, भले ही इसे UIViewController द्वारा प्रबंधित किया जाता है, फिर भी मुझे अक्सर UIViewController जैसे इसकी नेविगेशन नियंत्रक संपत्ति के गुणों तक पहुंचने की आवश्यकता होती है। हालांकि, UIViews को उनके UIViewController से अवगत नहीं होना चाहिए।

मेरा निष्कर्ष यह है कि दृश्य तर्क एक UIView के UIViewController में जाना चाहिए जब कोई मौजूद है, और UIView स्वयं अन्यथा।

वैकल्पिक रूप से, क्या यह देखने के लिए एक नियंत्रक वर्ग बनाने के लिए बेहतर अभ्यास है UIViewController का उप-वर्ग है? UIPopoverController (एक NSObject subclass) इस पैटर्न का पालन करना प्रतीत होता है, हालांकि ज्यादातर मामलों में (UIButton, आदि) दृश्यों में समर्पित नियंत्रक वर्ग नहीं लगते हैं।

+0

इसके अलावा, क्या UIViewControllers को कभी भी nib/xib फ़ाइल के बिना उपयोग किया जाना चाहिए (यानी, एक UIView जो कोड में बनाया गया है)? – titaniumdecoy

+0

व्यक्तिगत रूप से, मैं शायद ही कभी एनआईबी फाइलों का उपयोग करता हूं, इसलिए हाँ, आप पूरी तरह से UIViewController और उनके बिना दोस्त का उपयोग कर सकते हैं। – Alex

+0

तथ्य यह है कि -initWithNibName: बंडल: UIViewController का नामित प्रारंभकर्ता यह इंगित करता है कि यह निब के बिना उपयोग करने का इरादा नहीं है। – titaniumdecoy

उत्तर

3

आवेदन तर्क UIView में कभी नहीं जाना चाहिए। अवधि। UIViewController का उद्देश्य एक दृश्य और इसके सबव्यू प्रबंधित करना है और, अधिकांश परिस्थितियों में, तर्क के लिए उपयुक्त स्थान है। UIKit मॉडल-व्यू-कंट्रोलर प्रतिमान का पालन करता है। मॉडल डेटा धारण करते हैं, विचार इसे प्रदर्शित करते हैं और इनपुट स्वीकार करते हैं, और नियंत्रक अन्य दो परतों के बीच बातचीत का प्रबंधन करते हैं। यही कारण है कि नियंत्रक अनुप्रयोग तर्क के लिए तार्किक जगह है। आईओएस में, UIViewController और इसके उप-वर्ग सामान्य नियंत्रक वर्ग हैं। मैं इस पैटर्न को बेहतर ढंग से समझने के लिए reading up on Apple's guidance का सुझाव दूंगा और इसका उपयोग आईओएस में कैसे किया जाता है।

ऐप्पल के दस्तावेज़ से उद्धरण आपको बता रहा है कि आप प्रत्येक लेबल या बटन के लिए UIViewController नहीं बनाते हैं। आप अपने आवेदन के प्रत्येक "पृष्ठ" या "स्क्रीन" के लिए एक बनाते हैं और आप उस दृश्य में नियंत्रणों का प्रबंधन करने के लिए इसका उपयोग करते हैं। ध्यान दें कि UIKit में तालिका दृश्य, टैब दृश्य और नेविगेशन दृश्य प्रबंधित करने के लिए कक्षाएं हैं। यह ऑब्जेक्ट का स्तर है कि आप प्रबंधित करने के लिए UIViewController का उपयोग करेंगे।

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

+0

एक यूआईएसविच (या कोई अन्य नियंत्रण) के बारे में क्या? यह एक UIView उपclass है जो अपने राज्य का प्रबंधन करता है। – titaniumdecoy

+0

अपने स्वयं के राज्य का प्रबंधन तर्क से मेरा मतलब नहीं है। मेरा मतलब एप्लिकेशन तर्क है, जैसे कि उपयोगकर्ता को एक संवाद दिखाने या फ़ाइल सहेजने का निर्णय लेना। एक 'UISwitch' को पता होना चाहिए कि यह चालू है या नहीं, लेकिन उदाहरण के लिए, उपयोगकर्ता की प्राथमिकता फ़ाइल में अपना मूल्य सहेजने के लिए यह ज़िम्मेदार नहीं होना चाहिए। यह एक दृश्य नियंत्रक का काम है। – Alex

3

मैं Win32 + .NET + जावा स्विंग जीयूआई दुनिया से आया था और मैं वही काम करता था। लेकिन फिर मैंने अपने बुरे तरीकों को ठीक किया। अब UIView में कोड डालने का एकमात्र समय यह है कि यदि मैं दृश्य ITSELF (ओपनजीएल ड्राइंग, उदाहरण के लिए) को कस्टमाइज़ करना चाहता हूं।

नियंत्रकों ने दृश्य की स्थिति निर्धारित की। दृश्य अपने राज्य को प्रस्तुत करता है।

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