Apple ने स्पष्ट रूप से परिभाषित किया कि कैसे UIViewडॉक्टर में उपवर्ग का उपयोग करें।
नीचे दी गई सूची देखें, विशेष रूप से एक नज़र डालें initWithFrame:और layoutSubviews। पूर्व का उद्देश्य आपके फ्रेम को सेटअप करना है UIViewजबकि उत्तरार्द्ध का उद्देश्य फ्रेम और इसके सबव्यू के लेआउट को सेटअप करना है।
यह भी याद रखें कि initWithFrame:केवल तभी कहा जाता है जब आप अपने UIViewप्रोग्राम को तुरंत कर रहे हों । यदि आप इसे निब फ़ाइल (या स्टोरीबोर्ड) से लोड कर रहे हैं, initWithCoder:तो इसका उपयोग किया जाएगा। और initWithCoder:फ्रेम में अभी तक गणना नहीं की गई है, इसलिए आप इंटरफ़ेस बिल्डर में स्थापित फ्रेम को संशोधित नहीं कर सकते। के रूप में सुझाव दिया इस जवाब में आपको बुला के बारे में सोच सकता है initWithFrame:से initWithCoder:क्रम में सेटअप करने के लिए फ्रेम।
अंत में, यदि आप अपने UIViewको एक निब (या स्टोरीबोर्ड) से लोड करते हैं, तो आपके पास awakeFromNibकस्टम फ्रेम और लेआउट इनिशियलाइज़ेशन करने का अवसर भी है , क्योंकि जब awakeFromNibयह कहा जाता है तो यह गारंटी दी जाती है कि पदानुक्रम में हर दृश्य अनारक्षित और आरंभिक है।
के डॉक्टर से NSNibAwaking(अब के डॉक्टर द्वारा superseded awakeFromNib):
अन्य वस्तुओं के लिए संदेश awakeFromNib के भीतर से सुरक्षित रूप से भेजे जा सकते हैं - जिस समय तक यह आश्वासन दिया जाता है कि सभी ऑब्जेक्ट अनारक्षित और आरंभिक हैं (हालांकि जरूरी नहीं कि जागृत हो, निश्चित रूप से)
यह भी ध्यान देने योग्य है कि ऑटोलैयट के साथ आपको स्पष्ट रूप से अपने दृश्य का फ्रेम सेट नहीं करना चाहिए। इसके बजाय आपको पर्याप्त बाधाओं का एक सेट निर्दिष्ट करना चाहिए, ताकि फ़्रेम स्वचालित रूप से लेआउट इंजन द्वारा गणना की जाए।
प्रलेखन से सीधे :
ओवरराइड करने के तरीके
प्रारंभ
initWithFrame:यह अनुशंसा की जाती है कि आप इस विधि को लागू करें। आप इस विधि के अलावा या इसके बजाय कस्टम आरंभीकरण विधियों को भी लागू कर सकते हैं।
initWithCoder: यदि आप एक इंटरफ़ेस बिल्डर nib फ़ाइल से अपना दृश्य लोड करते हैं तो इस पद्धति को लागू करें और आपके दृश्य को कस्टम इनिशियलाइज़ेशन की आवश्यकता है।
layerClassइस पद्धति को केवल तभी लागू करें जब आप चाहते हैं कि आपका दृष्टिकोण इसके बैकिंग स्टोर के लिए एक अलग कोर एनीमेशन परत का उपयोग करे। उदाहरण के लिए, यदि आप अपने ड्राइंग को करने के लिए OpenGL ES का उपयोग कर रहे हैं, तो आप इस पद्धति को ओवरराइड करना चाहेंगे और CAEAGLLIT कक्षा को वापस करेंगे।
आरेखण और मुद्रण
drawRect:यदि आपका दृश्य कस्टम सामग्री खींचता है तो इस विधि को लागू करें। यदि आपका दृष्टिकोण कोई कस्टम ड्राइंग नहीं करता है, तो इस पद्धति को ओवरराइड करने से बचें।
drawRect:forViewPrintFormatter: इस विधि को केवल तभी लागू करें जब आप मुद्रण के दौरान अपने दृश्य की सामग्री को अलग तरह से खींचना चाहते हैं।
प्रतिबन्ध
requiresConstraintBasedLayout यदि आपके दृश्य वर्ग को ठीक से काम करने के लिए बाधाओं की आवश्यकता है तो इस वर्ग पद्धति को लागू करें।
updateConstraints यदि आपके दृश्य में आपके साक्षात्कारों के बीच कस्टम अवरोध बनाने की आवश्यकता है, तो इस पद्धति को लागू करें।
alignmentRectForFrame:, frameForAlignmentRect:इन तरीकों को लागू करने के लिए ओवरराइड करें कि आपके विचार अन्य विचारों से कैसे जुड़े हैं।
ख़ाका
sizeThatFits:इस विधि को लागू करें यदि आप चाहते हैं कि आपके दृश्य का आकार अलग-अलग डिफ़ॉल्ट आकार का हो, तो यह सामान्य रूप से संचालन के दौरान होगा। उदाहरण के लिए, आप अपने दृष्टिकोण को उस बिंदु पर सिकुड़ने से रोकने के लिए इस पद्धति का उपयोग कर सकते हैं, जहां साक्षात्कार सही ढंग से प्रदर्शित नहीं किए जा सकते।
layoutSubviews इस विधि को लागू करें यदि आपको अपने साक्षात्कारों के लेआउट पर अधिक सटीक नियंत्रण की आवश्यकता है, तो या तो बाधा या ऑटोरेस्पिरिंग व्यवहार प्रदान करते हैं।
didAddSubview:, willRemoveSubview:इन विधियों को लागू करने के रूप में अतिरिक्त और साक्षात्कार के निष्कासन को ट्रैक करने की जरूरत है।
willMoveToSuperview:, didMoveToSuperviewअपने दृश्य पदानुक्रम में वर्तमान दृश्य की गति को ट्रैक करने के लिए आवश्यकतानुसार इन विधियों को लागू करें।
willMoveToWindow:, didMoveToWindowइन तरीकों को लागू करने के लिए एक अलग विंडो में अपने दृश्य के आंदोलन को ट्रैक करने की आवश्यकता है।
घटना से निपटना:
touchesBegan:withEvent:, touchesMoved:withEvent:, touchesEnded:withEvent:, touchesCancelled:withEvent:यदि आप सीधे संपर्क के ईवेंट प्रबंधित करने की जरूरत है इन तरीकों को लागू करें। (जेस्चर-आधारित इनपुट के लिए, जेस्चर पहचानकर्ताओं का उपयोग करें।)
gestureRecognizerShouldBegin: इस विधि को लागू करें यदि आपका दृश्य सीधे घटनाओं को छूता है और अतिरिक्त कार्रवाई को ट्रिगर करने से संलग्न इशारों को पहचानने से रोकना चाहता है।