जवाबों:
आपको सेल के contentView के बैकग्राउंड को अपने रंग में सेट करना होगा। यदि आप सहायक उपकरण (जैसे प्रकटीकरण तीर, आदि) का उपयोग करते हैं, तो वे सफेद दिखेंगे, इसलिए आपको उन कस्टम संस्करणों को रोल करने की आवश्यकता हो सकती है।
UITableViewCellAccessoryCheckmark
उदाहरण के लिए किसी के खुद के रोल करने के लिए कोई भी लिंक ? धन्यवाद।
cell.textLabel.backgroundColor = [UIColor clearColor];
इस समस्या को हल करने के लिए मैं सबसे कुशल तरीका प्रस्तुत कर रहा हूं, willDisplayCell प्रतिनिधि विधि का उपयोग करें (यह पाठ लेबल पृष्ठभूमि के लिए सफेद रंग का ध्यान रखता है और साथ ही सेल.टेक्स्टलैब.टेक्स्ट और / या सेल .etailTextLextLabel.text का उपयोग करता है। ):
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { ... }
जब इस प्रतिनिधि पद्धति को सेल का रंग कहा जाता है, तो इसे टेबल व्यू के बजाय सेल के माध्यम से नियंत्रित किया जाता है, जैसे कि आप उपयोग करते हैं:
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath { ... }
तो सेल प्रतिनिधि विधि के शरीर के भीतर कोशिकाओं के वैकल्पिक रंगों के लिए निम्न कोड जोड़ें या तालिका के सभी कोशिकाओं को एक ही रंग बनाने के लिए फ़ंक्शन कॉल का उपयोग करें।
if (indexPath.row % 2)
{
[cell setBackgroundColor:[UIColor colorWithRed:.8 green:.8 blue:1 alpha:1]];
}
else [cell setBackgroundColor:[UIColor clearColor]];
इस समाधान ने मेरी परिस्थिति में अच्छा काम किया ...
cell.backgroundColor = UIColor.clearColor
यह वास्तव में सरल है, क्योंकि OS 3.0 सिर्फ सेल के बैकग्राउंड कलर को willDisplayCell विधि में सेट करता है। आपको सेलफ़ोररौटइंडेक्सपैथ में रंग सेट नहीं करना चाहिए।
यह दोनों सादे और समूहीकृत शैली के लिए काम करता है:
कोड:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = [UIColor redColor];
}
पुनश्च: यहाँ विडिज़प्ले के लिए दस्तावेज़ीकरण निकालने के लिए:
"तालिका दृश्य पंक्ति को खींचने के लिए सेल का उपयोग करने से ठीक पहले अपने प्रतिनिधि को यह संदेश भेजता है, जिससे प्रतिनिधि को प्रदर्शित होने से पहले सेल ऑब्जेक्ट को अनुकूलित करने की अनुमति मिलती है। यह विधि प्रतिनिधि को पहले से निर्धारित राज्य-आधारित गुणों को ओवरराइड करने का मौका देती है। तालिका दृश्य, जैसे चयन और पृष्ठभूमि का रंग। प्रतिनिधि के लौटने के बाद, तालिका दृश्य केवल अल्फा और फ्रेम गुणों को सेट करता है, और तब केवल पंक्तियों को एनिमेट करते समय जब वे अंदर या बाहर स्लाइड करते हैं। "
मुझे यह जानकारी इस पोस्ट में colionel से मिली है । उसे धन्यवाद दो!
मैंने अब तक जो सबसे अच्छा तरीका पाया है, वह सेल का बैकग्राउंड व्यू और सेल सबव्यू का स्पष्ट बैकग्राउंड सेट करना है। बेशक, यह केवल अनुक्रमित शैली के साथ तालिकाओं पर अच्छा लग रहा है, कोई बात नहीं या सामान के बिना।
यहाँ एक नमूना है जहाँ सेल की पृष्ठभूमि पीले रंग की है:
UIView* backgroundView = [ [ [ UIView alloc ] initWithFrame:CGRectZero ] autorelease ];
backgroundView.backgroundColor = [ UIColor yellowColor ];
cell.backgroundView = backgroundView;
for ( UIView* view in cell.contentView.subviews )
{
view.backgroundColor = [ UIColor clearColor ];
}
बस इसे आप यूआईटेबल व्यू डेलिगेट क्लास फाइल (.m) में डालें:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
UIColor *color = ((indexPath.row % 2) == 0) ? [UIColor colorWithRed:255.0/255 green:255.0/255 blue:145.0/255 alpha:1] : [UIColor clearColor];
cell.backgroundColor = color;
}
मैं सेबा के साथ सहमत हूं, मैंने अपने वैकल्पिक पंक्ति रंग को पंक्ति में स्थापित करने की कोशिश की है IndFexexPath प्रतिनिधि विधि, लेकिन 3.2 और 4.2 के बीच असंगत परिणाम प्राप्त कर रहा था। निम्नलिखित ने मेरे लिए बहुत अच्छा काम किया।
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if ((indexPath.row % 2) == 1) {
cell.backgroundColor = UIColorFromRGB(0xEDEDED);
cell.textLabel.backgroundColor = UIColorFromRGB(0xEDEDED);
cell.selectionStyle = UITableViewCellSelectionStyleGray;
}
else
{
cell.backgroundColor = [UIColor whiteColor];
cell.selectionStyle = UITableViewCellSelectionStyleGray;
}
}
सभी विभिन्न समाधानों को आज़माने के बाद, निम्नलिखित विधि सबसे सुरुचिपूर्ण है। निम्न प्रतिनिधि विधि में रंग बदलें:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (...){
cell.backgroundColor = [UIColor blueColor];
} else {
cell.backgroundColor = [UIColor whiteColor];
}
}
vlado.grigorov के पास कुछ अच्छी सलाह है - सबसे अच्छा तरीका एक पृष्ठभूमि दृश्य बनाना है, और यह कि एक रंग दें, और सब कुछ स्पष्ट करें। इसके अलावा, मुझे लगता है कि रंग को सही ढंग से साफ़ करने का एकमात्र तरीका है (उसके नमूने का प्रयास करें - लेकिन 'येलोकोलर' के बजाय 'क्लियरकोलर' सेट करें), जो कि मैं करने की कोशिश कर रहा था।
एक टेबल व्यू सेल की पृष्ठभूमि को अनुकूलित करना अंततः बन जाता है और "सभी या कुछ भी नहीं" दृष्टिकोण। सामग्री सेल की पृष्ठभूमि के लिए उपयोग किए जाने वाले रंग या छवि को इस तरह बदलना बहुत मुश्किल है जो अजीब न लगे।
कारण यह है कि सेल वास्तव में दृश्य की चौड़ाई का विस्तार करता है। गोल कोनों इसकी ड्राइंग शैली का सिर्फ एक हिस्सा है और इस क्षेत्र में सामग्री दृश्य बैठता है।
यदि आप सामग्री सेल का रंग बदलते हैं, तो आप कोनों पर दिखाई देने वाले सफेद बिट्स के साथ समाप्त हो जाएंगे। यदि आप पूरे सेल का रंग बदलते हैं, तो आपके पास दृश्य की चौड़ाई को बढ़ाते हुए रंग का एक ब्लॉक होगा।
आप निश्चित रूप से एक सेल को अनुकूलित कर सकते हैं, लेकिन यह उतना आसान नहीं है जितना आप पहले सोच सकते हैं।
N.Berendt के उत्तर पर विस्तार करने के लिए - यदि आप वास्तविक सेल डेटा ऑब्जेक्ट में कुछ स्थिति के आधार पर सेल का रंग सेट करना चाहते हैं, तो उस समय आप टेबल सेल के लिए शेष जानकारी को कॉन्फ़िगर कर रहे हैं, जो आमतौर पर जब आप में होते हैं CellForRowAtIndexPath विधि, आप सामग्री दृश्य पृष्ठभूमि रंग से सेल पृष्ठभूमि रंग सेट करने के लिए willDisplayCell विधि को ओवरराइड करके ऐसा कर सकते हैं - यह प्रकटीकरण बटन पृष्ठभूमि के मुद्दे के आसपास हो जाता है आदि सही नहीं हैं, लेकिन फिर भी आप सेलफ़ोररॉवेंटआईथैक्सपैथ विधि में रंग को नियंत्रित करने की सुविधा देते हैं। जहाँ आप अपने अन्य सेल अनुकूलन कर रहे हैं।
तो: यदि आप इस पद्धति को अपनी तालिका दृश्य प्रतिनिधि में जोड़ते हैं:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = cell.contentView.backgroundColor;
}
फिर अपने सेलफ़ोर रॉटएंडएक्सपेथ विधि में आप कर सकते हैं:
if (myCellDataObject.hasSomeStateThatMeansItShouldShowAsBlue) {
cell.contentView.backgroundColor = [UIColor blueColor];
}
यह आपके डेटा ऑब्जेक्ट्स को फिर से इच्छा-सूची विधि में पुनः प्राप्त करने से बचाता है और दो स्थानों को बचाता है जहाँ आप अपने टेबल सेल के टेलरिंग / अनुकूलन करते हैं - सभी अनुकूलन सेलफ़ोरराउटइंडेक्सपैथ विधि में जा सकते हैं।
फ़ोटोशॉप या जिम्प के साथ पृष्ठभूमि के रूप में उपयोग करने के लिए एक छवि बनाएं और इसे नाम दें। उसके बाद, अपनी तालिका में इस पद्धति को जोड़ें
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
UIImage *cellImage = [UIImage imageNamed:@"myimage.png"];//myimage is a 20x50 px with gradient color created with gimp
UIImageView *cellView = [[UIImageView alloc] initWithImage:cellImage];
cellView.contentMode = UIContentViewModeScaleToFill;
cell.backgroundView = cellView;
//set the background label to clear
cell.titleLabel.backgroundColor= [UIColor clearColor];
}
यह तब भी काम करेगा जब आपने विशेषता निरीक्षक में कस्टम को UITableView सेट किया है।
मेरा समाधान निम्नलिखित कोड को सेलफ़ोरराउटअंडेक्सपैथ घटना में जोड़ना है:
UIView *solidColor = [cell viewWithTag:100];
if (!solidColor) {
solidColor = [[UIView alloc] initWithFrame:cell.bounds];
solidColor.tag = 100; //Big tag to access the view afterwards
[cell addSubview:solidColor];
[cell sendSubviewToBack:solidColor];
[solidColor release];
}
solidColor.backgroundColor = [UIColor colorWithRed:254.0/255.0
green:233.0/255.0
blue:233.0/255.0
alpha:1.0];
किसी भी परिस्थिति में काम करता है, यहां तक कि प्रकटीकरण बटन के साथ भी, और सेल लॉरॉश शो में ईवेंट सेलफोररॉइटएंडएक्सपैथ की तुलना में सेल तर्क पर रंग तर्क पर कार्य करने के लिए बेहतर है।
उपवर्ग UITableViewCell और कार्यान्वयन में इसे जोड़ें:
-(void)layoutSubviews
{
[super layoutSubviews];
self.backgroundColor = [UIColor blueColor];
}
इसे इस्तेमाल करे:
- (void)tableView:(UITableView *)tableView1 willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
[cell setBackgroundColor:[UIColor clearColor]];
tableView1.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"Cream.jpg"]];
}