2012-12-05 13 views
5

मेरे पास क्लास MyView है जिसे मैं स्टोरीबोर्ड के माध्यम से UIViewController कॉन्फ़िगर किया गया है। अधिकांश दृश्य गुण इंटरफ़ेस बिल्डर के माध्यम से कॉन्फ़िगर किया गया है; हालांकि, मैं, प्रोग्राम के रूप में मेरी बटन के लिए पृष्ठभूमि के रूप में उन्हें सेट करने से पहले छवियों के एक जोड़े समायोजित करने की आवश्यकता इस तरह:स्टोरीबोर्ड से लोड होने के बाद UIView समायोजित करना

-(void)setupVisuals { 
    UIImage *image = [[UIImage imageNamed:@"myButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)]; 
    // _myButton is an IBOutlet property set through the storyboard: 
    [_myButton setBackgroundImage:image forState:UIControlStateNormal]; 
} 
समस्या

है कि मैं प्रारंभकर्ता * से [self setupVisuals] कॉल नहीं कर सकते, क्योंकि _myButton पर nil है उस समय।

मैं, सब कुछ ठीक काम करता है जगह में इस कॉल के साथ MyViewController के viewDidLoad:

[(MyView*)self.view setupVisuals]; 

को यह पंक्ति जोड़कर समस्या हल हो। हालांकि, यह एक अपेक्षाकृत आम समस्या की संभावना के समाधान के बजाय एक कार्य-आसपास की तरह लगता है।

वहाँ viewDidLoad: तंत्र दोहन के बिना MyView के दृश्यों का आरंभीकरण पूरा करने के लिए किसी अन्य तंत्र ओवरराइड करने के लिए एक UIView विधि, या है?


* इस मामले में, प्रारंभकर्ता initWithCoder: क्योंकि दृश्य स्टोरीबोर्ड से भरी हुई है है। मैंने सत्यापित किया कि प्रारंभकर्ता को सही ढंग से बुलाया जाता है, लेकिन दृश्य अभी तक तैयार नहीं हैं।

+0

आईआईआरसी 'initWithFrame: 'एनआईबी/एक्सआईबी से लोड होने पर भी कहा जाता है। वहां से, 'सुपर' पर कॉल करने के बाद, क्या आप ऐसा नहीं कर सकते? मुझे याद है कि एक ही समस्या है और मैंने इसे हल किया है, लेकिन मुझे याद नहीं है कि यह वास्तव में क्या/वास्तव में था। –

+0

इन मामलों में मैं आमतौर पर 'viewWillAppear' में "प्रारंभिकता" करता हूं, लेकिन अगर इसे संभालने के लिए एक क्लीनर तरीका है, तो मैं जानना चाहता हूं। मूल रूप से स्टोरीबोर्ड से लोड किए गए दृश्य को उसके सभी आउटलेट के साथ कब बरकरार रखा जाता है? –

+0

क्या आपने अपने दृश्य नियंत्रक में viewWillAppear विधि से केवल [self.myView सेटअप विज़ुअल] का प्रयास किया था? यदि आपने आईबी में उस दृश्य को आरंभ किया है और इसे आउटलेट के रूप में सेट किया है तो इसे काम करना चाहिए। –

उत्तर

2

ऐसा लगता है कि आप viewDidLoad: का उपयोग कर रहे हैं। एप्पल के docs के अनुसार:

आप आम तौर पर इस विधि को ओवरराइड बार देखा गया है कि फ़ाइलें निब लोड किया गया था पर अतिरिक्त आरंभीकरण प्रदर्शन करने के लिए।

अपने लक्ष्य UIView स्तर पर इस कार्यक्षमता को संपुटित रहा है, layoutSubviews प्रयास करें।

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