2010-08-08 16 views
9

मैं एक UITableView की कोशिकाओं को अनुकूलित करने के लिए एक कस्टम nib फ़ाइल लोड कर रहा हूं। कस्टम निब में एक UILabel है जिसे टैग द्वारा मुख्य दृश्य से संदर्भित किया जाता है। मैं जानना चाहूंगा कि जब सेल को एक अलग रंग में चुना जाता है तो UILabel के छाया रंग को बदलना संभव है, तो यह स्क्रीनशॉट में दिखाई नहीं देता है।कस्टम सेल से UILabel छाया चयनित रंग

screenshot

उत्तर

11

आप प्रतिनिधि में -tableView:willSelectRowAtIndexPath: में लेबल की छाया रंग बदल सकता है। उदाहरण के लिए:

-(NSIndexPath*)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.shadowColor = [UIColor greenColor]; 
    return indexPath; 
} 
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.shadowColor = [UIColor redColor]; 
} 
+3

यह उत्तर हाइलाइट किए गए सेल स्थिति के लिए काम नहीं करता है (यानी यदि उपयोगकर्ता सेल पर दबाता है लेकिन रिलीज़ नहीं होता है)। जेसन का जवाब दुर्भाग्यवश सबसे अच्छा है जिसे मैंने इस मामले से निपटने के लिए देखा है। यह दुर्भाग्यपूर्ण है कि इसमें उप-वर्गीकरण शामिल है। आपको सेट को ओवरराइड करने की भी आवश्यकता हो सकती है: – Prometheus

16

मैं प्रतिनिधि को प्रदूषित न करने के लिए टेबलसेल कोड के अंदर छाया रंग परिवर्तन करना पसंद करता हूं। इसका सरल उत्तर

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animate 
{ 
    UIColor * newShadow = highlighted ? [UIColor clearColor] : [UIColor whiteColor]; 

    nameLabel.shadowColor = newShadow; 

    [super setHighlighted:highlighted animated:animate]; 
} 
0

, कम से कम ऊपर दिखाए गए उदाहरण के लिए, पहली जगह में छाया प्रदर्शित नहीं करने के लिए है: आप इसे संभाल करने के लिए इस विधि ओवरराइड कर सकते हैं। चूंकि आप सफेद-ऑन-व्हाइट को वैसे भी नहीं देख सकते हैं, इसलिए छाया रंग को -कलर रंग सेट करें।

यदि आपको वास्तव में छाया की आवश्यकता है, तो सेट हाइलाइट किए गए विधि को ओवरराइड करना सबसे अच्छा समाधान है। यह कोड को सेल के साथ रखता है, जो मुझे लगता है कि तालिका दृश्य से इसे संभालने की कोशिश करने से बेहतर है।

2

मेरे पास एक ही समस्या थी और उपर्युक्त समाधानों में से कोई भी मेरे लिए काफी काम नहीं करता था - मैं UITableViewCell को उपclass नहीं करना चाहता था और कुछ मुश्किल चयनित/हाइलाइट किए गए राज्य परिवर्तनों को प्रोग्रामेटिक रूप से भी किया गया था, जो ऊपर दिए गए समाधानों के साथ अच्छा नहीं खेलता था ।

MySolution:

मैं अंत में क्या किया था एक छाया के रूप में कार्य करने के लिए प्राथमिक UILabel के नीचे एक दूसरे UILabel उपयोग करने के लिए है। उस 'छाया' के लिए UILabel आप 'हाइलाइट किए गए रंग' को 'साफ़ रंग' पर सेट कर सकते हैं।

स्पष्ट रूप से आपको प्रत्येक बार प्राथमिक लेबल अपडेट करने पर छाया लेबल अपडेट करना होगा। कई मामलों में भुगतान करने की कोई बड़ी कीमत नहीं है।

आशा है कि मदद करता है!

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