2012-08-13 10 views
19

मुझे UITableViewCell का सबक्लास मिला है। मेरे उप-वर्ग में कई UILabel एस शामिल हैं। मैं चाहता हूं कि मेरा सबक्लास इन लेबलों को कुछ डिफ़ॉल्ट सेटिंग्स में प्रारंभ करने के लिए चाहता है जो मेरे प्रत्येक तालिका दृश्य कक्ष पर लागू होता है।initWithCoder आइटम को सही तरीके से प्रारंभ क्यों नहीं कर रहा है?

मैंने पढ़ा है कि मुझे इसके लिए initWithCoder का उपयोग करना चाहिए। मेरा initWithCoder फ़ंक्शन कहा जा रहा है, और मैं अपने फ़ंक्शन में प्रत्येक पंक्ति के माध्यम से कदम उठा सकता हूं और यह गति के माध्यम से जाना प्रतीत होता है। जब मैं अपना आवेदन चलाता हूं तो मुझे कोई भी गुण लागू नहीं होता है, हालांकि। सबसे महत्वपूर्ण बात यह है कि फ़ॉन्ट नहीं बदला जा रहा है। मुझे नहीं लगता कि मैं अपने UILabel एस पर संशोधित किसी भी गुण को वास्तव में सहेजा जा रहा हूं, या प्रदर्शित किया जा रहा हूं।

मैं इस सबक्लास का उपयोग Storyboard के संयोजन के साथ कर रहा हूं। मुझे पता है कि मेरे परिवर्तन Storyboard पर प्रतिबिंबित नहीं होंगे, लेकिन जब भी मेरे कोड को निष्पादित किया जाता है, तब भी वे एप्लिकेशन पर चलने पर प्रतिबिंबित नहीं होते हैं।

संपादित करें:। मैं initWithCoder ओवरराइड करने के लिए कोशिश कर रहा से पहले, मैं इन उपवर्गों कि मैं इस तर्क को चलाने था में एक उदाहरण विधि था कि उल्लेख करना चाहता था मैं बस cellForRowAtIndexPath के अंदर कि उदाहरण विधि कॉल करेगा। यह विधि काम कर रही थी, लेकिन मैंने सोचा कि यह सबक्लास इस तर्क में स्वचालित रूप से होने के लिए आसान होगा।

कोई विचार? मेरे कोड के नीचे है:

#import "ThreadListCell.h" 

@implementation ThreadListCell 

- (id)initWithCoder:(NSCoder *)aDecoder { 

    if ((self = [super initWithCoder:aDecoder])) { 

     // adjust the font settings of the title 
     self.title.font = [UIFont fontWithName:@"SourceSansPro-Black" size:16]; 
     self.title.textColor = [UIColor colorWithWhite:0.267f alpha:1.0f]; 

     // adjust the font settings of the subtitle 
     self.text.font = [UIFont fontWithName:@"SourceSansPro-Light" size:14]; 
     self.text.textColor = [UIColor colorWithWhite:0.267f alpha:0.9f]; 
     self.text.textColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:1]; 

     // adjust the font settings of the location 
     self.location.font = [UIFont fontWithName:@"SourceSansPro-Light" size:8]; 
     self.location.textColor = [UIColor colorWithWhite:0.267f alpha:0.9f]; 

     // adjust the UILabel settings of the title 
     self.title.numberOfLines = 0; 
     self.title.lineBreakMode = UILineBreakModeTailTruncation; 

     // adjust the UILabel settings of the subtitle 
     self.text.numberOfLines = 0; 
     self.text.lineBreakMode = UILineBreakModeTailTruncation; 

     // adjust the UILabel settings of the location 
     self.location.numberOfLines = 0; 
     self.location.lineBreakMode = UILineBreakModeTailTruncation; 
     self.location.textAlignment = UITextAlignmentRight; 

    } 

    return self; 

} 

@end 

और हैडर:

#import <UIKit/UIKit.h> 

@interface ThreadListCell : UITableViewCell 

@property (nonatomic, weak) IBOutlet UILabel *text; 
@property (nonatomic, weak) IBOutlet UILabel *title; 
@property (nonatomic, weak) IBOutlet UILabel *location; 

@end 

उत्तर

45

अपने IBOutlets में से कोई भी सेट कर दिया जाता है जब आप संदेश मिलता है - आप "awakeFromNib" या "viewDidLoad" का उपयोग करने की जरूरत है - ऐसा ही कुछ - अपने आउटलेट तक पहुंचने के लिए। उस ने कहा, आप initWithCoder में अन्य गैर-आउटलेट सामान सेट कर सकते हैं।

+1

ओह, ठीक है। 'AwitFromNib' के साथ' initWithCoder' को प्रतिस्थापित करने की अपेक्षा की जाती है। आपका बहुत बहुत धन्यवाद! – Ryan

+0

हालांकि, ऐसा लगता है कि 'cellForRowAtIndexPath' में मेरे किसी भी गुण को सेट करने से पहले' awakeFromNib' होता है। इससे मुझे लगता है कि शायद मेरी आवृत्ति विधि बेहतर दृष्टिकोण थी, क्योंकि मैं विश्वसनीय रूप से 'UILabel', आदि में वर्तमान पाठ के आधार पर आकार बदलने के संचालन कर सकता था। – Ryan

+3

आदेश होना चाहिए: initWithCoder, awakeFromNib, cellForRowAtIndexPath। यदि आपको कुछ गणित मानों को "प्रीसेट" करने की आवश्यकता है, तो आप इसे इनिट रूटीन में कर सकते हैं। लेकिन जब तक निब लोड नहीं हो जाता है तब तक आपके पास अपने आउटलेट तक पहुंच नहीं है। –

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