2010-12-02 6 views
9

देखें नियंत्रक प्रोग्रामिंग गाइड राज्यों इस बारे में दृश्य नियंत्रक के उपयोग:कस्टम दृश्य नियंत्रकों का उपयोग करते हुए एक ही दृश्य के विभिन्न भागों का प्रबंधन करने के पदानुक्रम

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

मैं समझता हूँ कि अगर हम का उपयोग करके कई कस्टम दृश्य नियंत्रक के एक दृश्य के कुछ हिस्सों डिफ़ॉल्ट तरीकों की तरह (एक मुख्य दृश्य है जो बदले में एक दृश्य के नियंत्रक द्वारा किया जाता है की subviews प्रबंधन करने के लिए यानी एक दृश्य नियंत्रक) को नियंत्रित करने के:

didReceiveMemoryWarnings 
viewWillAppear 
viewWillDisappear 
viewDidUnload 

इत्यादि नहीं कहा जाएगा।

इसके अलावा, क्या कोई अन्य ठोस कारण है कि हम कई दृश्य नियंत्रक नहीं का उपयोग करना चाहिए के लिए एक दृश्य के संबंधित subviews प्रबंधन करने के लिए है?

नोट:: आप एक से अधिक subareas में एक दृश्य के पदानुक्रम विभाजित करना चाहते हैं और अलग से हर एक को प्रबंधित करते हैं तो सामान्य नियंत्रक वस्तुओं का उपयोग करें (कस्टम

प्रलेखन भी कोई वैकल्पिक समाधान जो पढ़ता के रूप में प्रदान करते हैं NSObject से उतरने वाली वस्तुएं नियंत्रक ऑब्जेक्ट्स को देखने के बजाय प्रत्येक उपर्य का प्रबंधन करें। फिर सामान्य नियंत्रक ऑब्जेक्ट्स को प्रबंधित करने के लिए एक नियंत्रक ऑब्जेक्ट देखें।

लेकिन क्यों कई दृश्य नियंत्रकों को प्राथमिकता नहीं दी जानी चाहिए करने के लिए के रूप में कोई जिक्र नहीं है। मेरा प्रश्न है:

क्यों हम इसे इस तरह से नहीं पसंद करते हैं चाहिए?

मुझे चिंतित है क्योंकि मैं अपने विचारों को प्रबंधित करने के लिए UIViewController के उप-वर्ग का उपयोग करना पसंद करता हूं क्योंकि मैं उन्हें प्रत्येक बार निब से लोड करता हूं और मैं प्रत्येक दृश्य नियंत्रकों के लिए nibs को अलग करता हूं। परियोजना के बाद के चरणों में परिवर्तनों को पूरा करना आसान हो जाता है। क्या यह गलत है? क्या मुझे अपनी प्रोग्रामिंग शैली बदलनी चाहिए, या यह ठीक है अगर मैं इस दृष्टिकोण से आगे बढ़ूं?

धन्यवाद,

राज

उत्तर

3

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

क्या आप इंटरफेस बिल्डर के साथ अपनी ऑब्जेक्ट्स का उपयोग नहीं कर सकते? यदि आप एक (या कई) UIView IBOutlet (ओं) बनाते हैं, तो इसे भी काम करना चाहिए।

+0

हां यह किया जा सकता है, मैं एक NSObject सबक्लास बना सकता हूं और इसे उस निब के लिए फ़ाइल के स्वामी के रूप में नामित कर सकता हूं। लेकिन मैं सोच रहा था कि क्या ऐसा कोई अन्य विशिष्ट कारण नहीं है कि ऐसा क्यों न करें। ऑब्जेक्ट की आपकी व्याख्या "भारी" होने के कारण अब तक पर्याप्त है। –

+1

ठीक है, मुझे लगता है कि यह काफी बेकार है। चूंकि आपने जो एकमात्र कारण दिया है उन्हें आईबी में अलग करना था, और यह एनएसओब्जेक्ट के साथ किया जा सकता है। मुझे नहीं लगता कि आप किसी भी UIViewController के तरीकों का उपयोग करेंगे, तो इस विशिष्ट ऑब्जेक्ट को उपclass क्यों करें? मेरा मतलब है कि आप किसी अन्य यूआईआरस्पोन्डर सबक्लास (जैसे UIView, या UIButton) को भी उपclass कर सकते हैं, लेकिन चूंकि आपके द्वारा उपयोग की जाने वाली एकमात्र रोचक चीज़ आईबीओलेट है, आपको ऐसी विशिष्ट वस्तु की आवश्यकता नहीं है। – Julien

+0

यूप, बहुत सच है। माना। –

0

मेरे पास एक ऐप है जो एक ही स्क्रीन पर दो UIViewControllers का उपयोग करता है। बच्चा एक UITableViewController है। मैं बच्चे के किसी भी UIViewController व्यवहार पर भरोसा नहीं करता - केवल UITableViewController विधियों। यह सुविधाजनक है क्योंकि ऐसे अन्य मामले हैं जहां बच्चे UITableViewController पूरी स्क्रीन का प्रबंधन करता है। और उस स्थिति में, यह UIViewController विधियों का उपयोग करता है। संदिग्ध डिजाइन? शायद। यह अब दो साल के लिए ठीक काम किया है। लेकिन मुझे यकीन नहीं है कि मैं पैटर्न की सिफारिश करूंगा।