2012-01-04 12 views
6

मेरे पास एक कस्टम दृश्य है जिसके लिए मुझे कुछ सबव्यू प्रोग्राम प्रोग्रामिक रूप से जोड़ने की आवश्यकता है। इन सबव्यूज बनाने और जोड़ने के लिए सबसे अच्छी जगह कौन सा है? Apple docs कहते हैं:कहां कॉल करें [self addSubView]?

आपके विचार वर्ग एक या अधिक अभिन्न subviews का प्रबंधन करता है, तो निम्न कार्य करें: अपने दृश्य के प्रारंभ अनुक्रम के दौरान उन subviews बनाएँ।

यह मेरे लिए थोड़ा अस्पष्ट है। क्या मुझे इसे initWithFrame, initWithCoder या कहीं और संभालना चाहिए?

ध्यान दें कि मैं यहां नियंत्रकों के बारे में बात नहीं कर रहा हूं, यह एक ऐसा दृश्य है जिसे स्वयं शुरू करने की आवश्यकता है।

उत्तर

9

initWithFrame वह तरीका है जिसे आप प्रोग्रामिंग के रूप में UIView बनाने के लिए कहते हैं, जबकि initWithCoder को तब कहा जाता है जब एक UIView को XIB से निकाला जाता है।

तो यह सब इस बात पर निर्भर करता है कि आप अपना व्यू व्यू कैसे बना रहे हैं। एक तरह से सभी मामलों को कवर करने के:

- (id) initWithFrame:(CGRect)frame 
{ 
    if ((self = [super initWithFrame:frame])){ 
     [self setUpSubViews]; 
    } 
    return self; 
} 

- (id) initWithCoder:(NSCoder*)aDecoder 
{ 
    if ((self = [super initWithCoder:aDecoder])){ 
     [self setUpSubViews];//same setupv for both Methods 
    } 
    return self; 
} 

- (void) setUpSubViews 
{ 
    //here create your subviews hierarchy 
} 
+0

एक एनआईबी से अपने विचार (कंटेनर और सबव्यूव) बनाने का एक विकल्प। – Vinzzz

+0

धन्यवाद, यह अच्छा लग रहा है। – georg

0

आम तौर पर, यदि आप हर समय दृश्य दिखाना चाहते हैं तो आपको मूल दृश्य नियंत्रक के व्यूडिडलोड/व्यूविल्लप्लेयर में दृश्य और [स्वयं addSubView] बनाना चाहिए। यदि आप चाहें तो आप इसे छुपा भी सेट कर सकते हैं। किसी अन्य परिदृश्य में जैसे आप बटन क्लिक या कुछ अन्य कार्रवाइयों पर एक दृश्य दिखाना चाहते हैं, आपको तदनुसार सबव्यूव जोड़ना चाहिए।

+0

कृपया अधिक सावधानी से पढ़ें! वह ऐसे विचार के बारे में बात कर रहा है जिसे अपने स्वयं के सबव्यूव्स बनाने/जोड़ने की जरूरत है। यह नियंत्रकों को देखने के लिए पूरी तरह से असंबंधित में! –

0

अभिन्न अंग से, उनका मतलब या तो महत्वपूर्ण या भारी है। viewDidLoad बस ठीक काम करता है, लेकिन वास्तव में बड़ी, या महत्वपूर्ण सामग्री के लिए, प्रारंभिक तरीकों को जाने का तरीका है।

3

निम्न कार्य करें: विधि जो भी आपके विचार के लिए नामित प्रारंभकर्ता है ले लो। यही है, यह सबसे कॉन्फ़िगर करने योग्य (i। ई। अधिकांश तर्क) init ... विधि है कि हर दूसरे प्रारंभकर्ता कॉल करता है। उदाहरण के लिए, यह -initWithFrame :, आमतौर पर हो सकता है। फिर इस विधि को निम्नानुसार कार्यान्वित करें:

- (id) initWithFrame:(CGRect)frame { 
    if ((self = [super initWithFrame:frame])) { 
     // add new views here, for example: 
     UIImageView *imageView = [[UIImageView alloc] initWithImage:anImage]; 
     [self addSubview:imageView]; 
     [imageView release]; 
    } 
    return self; 
} 
+0

बहुत बहुत धन्यवाद! .. – georg

+0

कोई समस्या नहीं, क्या आप वास्तव में मदद कर सकते हैं अगर यह वास्तव में मदद करता है? –

+1

मैंने एक और जवाब स्वीकार कर लिया है क्योंकि यह अधिक "संदर्भ" कोड प्रदान करता है। अगर मैं कर सकता तो मैं भी तुम्हारा स्वीकार करूंगा। – georg

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