2008-10-21 17 views
11

के भीतर UILabel के पृष्ठभूमि रंग को बदलना एक UITableViewCell UILabel के साथ "प्री-बिल्ट" आता है, इसके बाद इसे एक और एकमात्र सबव्यूव के रूप में देखा जाता है। मैं वास्तव में कहा लेबल के पृष्ठभूमि रंग को बदलने के लिए, लेकिन कोई फर्क नहीं पड़ता कि मैं रंग क्या बदलता है। सवाल में कोड:UITableViewCell

UILabel* label = (UILabel*)[cell.contentView.subviews objectAtIndex:0]; 
label.textColor = [UIColor whiteColor]; 
label.backgroundColor = [UIColor darkGrayColor]; 
label.opaque = YES; 

उत्तर

8

आपका कोड स्निपेट मेरे लिए ठीक काम करता है, लेकिन उसके बाद सेल तालिका में जोड़ा और दिखाया गया है यह किया जाना चाहिए, मेरा मानना ​​है कि। यदि initWithFrame:reuseIdentifier: से कॉल किया गया है, तो आपको एक अपवाद मिलेगा, क्योंकि UILabelसबव्यू अभी तक नहीं बनाया गया है।

शायद सबसे अच्छा समाधान अपने स्वयं के UILabel को जोड़ना है, जो आपके मानकों के लिए कॉन्फ़िगर किया गया है, अंतर्निहित एक के लिए इस (बहुत कठोर) पथ पर निर्भर रहने के बजाय।

+0

खैर, कारण मैं पहली जगह में पूछना है, क्योंकि मैं, सूका रोगी पथ पर भरोसा करना चाहते हैं अर्थात्: मैं अपने खुद के subview बनाने के लिए नहीं करना चाहते हैं (हाँ, मैं कर रहा हूँ वह आलसी)। आप कहते हैं कि मेरा कोड आपके लिए काम करता है जिसमें यह पृष्ठभूमि रंग बदलता है? क्या आप इस बात पर अधिक विशिष्ट हो सकते हैं कि आप इसे कैसे काम कर रहे हैं? – rpj

+0

मैं भी आलसी हूं, लेकिन यह खतरनाक है ;-) मैंने अपने सेल की इनिट विधि में एक स्थगित कॉल जोड़ा जो आपका कोड कहलाता है। यह पृष्ठभूमि रंग बदल गया (और निश्चित रूप से पाठ रंग)। –

2

सामग्री में अपना स्वयं का लेबल जोड़ें जब आप सेल में आवंटित होते हैं, तो अंतर्निहित निष्कर्षण पर निर्भर होने के बजाय देखें। तो फिर तुम सभी मूल्यों को नियंत्रित कर सकते हैं:

UILabel* label = [[[UILabel alloc] init] autorelease]; 
label.textColor = [UIColor whiteColor]; 
label.backgroundColor = [UIColor darkGrayColor]; 
label.opaque = YES; 
[cell.contentView addSubview:label]; 
+0

यह कम से कम नहीं दिखता है, कम से कम तालिका के अंदर से नहीं: सेलफोररोएट इंडेक्सपैथ: जहां मैं चीजों को काम करने की कोशिश कर रहा हूं। कोई संकेत? – rpj

5

इसका कारण यह है UITableViewCell layoutSubviews विधि में उसका लेबल backgroundColors सेट काम नहीं करता।

यदि आप अंतर्निहित टेक्स्ट लेबल या विवरण का रंग बदलना चाहते हैं तो टेक्स्ट लेबल, UITableViewCell को उपclass और लेआउट ओवरव्यू देखें। सुपर कार्यान्वयन को कॉल करें, फिर पृष्ठभूमि रंग को अपनी इच्छित चीज़ों में बदलें।

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 

    self.textLabel.backgroundColor = [UIColor redColor]; 
} 
0
for (UIView *views in views.subviews) 
{ 
    UILabel* temp = (UILabel*)[views.subviews objectAtIndex:0]; 
    temp.textColor = [UIColor whiteColor];   
    temp.shadowColor = [UIColor blackColor]; 
    temp.shadowOffset = CGSizeMake(0.0f, -1.0f); 
}