2010-04-02 14 views
10

मैं होगा पंक्तियों की वैकल्पिक 2 रंग है करने के लिए, पहले अश्वेत, दूसरा सफेद, तीसरे काला, आदि, आदि ... की तरहमैं आईफोन पर UITableView के लिए वैकल्पिक रंगों के साथ पंक्तियां कैसे बना सकता हूं?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
static NSString *CellIdentifier = @"Cell"; 
cell = ((MainCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]); 
if (cell==nil) { 

    NSArray *topLevelObjects=[[NSBundle mainBundle] loadNibNamed:@"MainCell" owner:self options:nil]; 

    for (id currentObject in topLevelObjects){ 
     if ([currentObject isKindOfClass:[UITableViewCell class]]){ 
      if ((indexPath.row % 2)==0) { 
       [cell.contentView setBackgroundColor:[UIColor purpleColor]]; 

      }else{ 
       [cell.contentView setBackgroundColor:[UIColor whiteColor]]; 

      } 
      cell = (MainCell *) currentObject; 
      break; 
     } 
    } 

}else { 

    AsyncImageView* oldImage = (AsyncImageView*) 
    [cell.contentView viewWithTag:999]; 
    [oldImage removeFromSuperview]; 
}return cell; 

समस्या यह है कि जब मैं एक तेजी से पुस्तक, करना कोशिकाओं की पृष्ठभूमि पिछले 2 सेल काले, पहले 2 सेल सफेद या इस तरह कुछ की तरह बन जाती है, लेकिन अगर मैं धीमी गति से काम करता हूं तो ठीक काम करता है। मुझे लगता है कि समस्या पुन: प्रयोज्य कैश का कैश है।

कोई विचार?

TIA

+0

यदि आप सेलइडेन्टिफायर को एक पर सेट कर रहे हैं स्ट्रिंग शाब्दिक, इसे स्थिर –

+1

@ जेरेड पी मत बनाओ: एक स्ट्रिंग शाब्दिक स्थिर में पॉइंटर बनाने में कुछ भी गलत नहीं है। –

+0

मैं अभी भी जावा में सोचता हूं! लेकिन स्थिर पहचानकर्ता के साथ मुझे जो पता है, उसके लिए वस्तु के मूल्य को एक ही बार आवंटित किया जाता है ... – Mat

उत्तर

25

कोशिकाओं पुनर्नवीनीकरण हो (यह है कि आप क्या कर रहे हैं जब आप उन्हें विपंक्ति और अगर यह नहीं के बराबर है की जाँच है)। तो जब आप सेल बनाते हैं तो पृष्ठभूमि रंग सेट करने के बजाय, इसे कुछ समय बाद सेट करें। तो:

if(!cell) { 
    // create the cell and stuff 
} 
if([indexPath row] % 2) 
    [cell setBackgroundColor:[UIColor whiteColor]]; 
else 
    [cell setBackgroundColor:[UIColor purpleColor]]; 
+0

ठीक है, बहुत अच्छा काम करता है ..! – Mat

+0

यह दृष्टिकोण मेरे लिए काम नहीं किया था। सभी प्रकार की चीजों को आजमाने के बाद, इसे बनाने के लिए एकमात्र तरीका अलग-अलग रंगों की कोशिकाओं के लिए अलग-अलग पुन: उपयोग करने वाला था। – autremoi

+0

आप cellForRowAtIndexPath में सेल पृष्ठभूमि सेट नहीं कर सकते हैं। आप इसे WillDisplayCell विधि में सेट कर सकते हैं। –

2

मुझे विश्वास है कि क्या हो रहा है यह है कि जब आप एक पुन: प्रयोज्य सेल को हटाते हैं, तो आप एक निर्धारित क्रम में ऐसा नहीं करते हैं। जैसे ही होगा, जब आप धीरे-धीरे स्क्रॉल करते हैं, तो कोशिकाएं एक समय में एक उपलब्ध हो जाती हैं, और क्रमशः आपके लिए नियुक्त की जाती हैं। जब आप जल्दी स्क्रॉल करते हैं, तो ऑर्डर अनिर्धारित हो जाता है, जैसा कि क्रम में वे ऑर्डर करते हैं। मेरा मानना ​​है कि यही कारण है कि (बड़े हिस्से में) सेब ने यूआईटीबल व्यू एपीआई को पहचानकर्ता द्वारा डेक्यू करने के लिए डिज़ाइन किया - ताकि आप विभिन्न प्रकार के कोशिकाओं जैसे कि आसानी से विभिन्न रंगों का पुन: उपयोग कर सकें। इस प्रकार, मैं प्रत्येक सेल रंग के अपने पहचानकर्ता होने के लिए कोड को संशोधित करने की अनुशंसा करता हूं। (इसके अलावा, यदि संभव हो तो सेल में इस टेबलव्यू डेटासोर्स को सीधे कनेक्ट करने वाला आउटलेट है, या इसे एक बार लोड करने के बाद इसे एक ivar में सहेजें, और उसके बाद इसे उच्च स्तरीय ऑब्जेक्ट्स के माध्यम से साइकिल चलाने की बजाय कॉपी करें)

+0

ऐसा मत करो। यदि आप पृष्ठभूमि रंग बदल रहे हैं, तो यह सेल सामग्री की तरह है, इसलिए एक ही पहचानकर्ता का उपयोग करें। यदि आपके पास अलग-अलग सेल व्यवस्था या कुछ था तो आप विभिन्न पहचानकर्ताओं का उपयोग करेंगे। आप इस तरह के कुछ के लिए अलग पहचानकर्ताओं का उपयोग कर संसाधनों को बर्बाद करते हैं। –

+0

2 अलग-अलग पहचानकर्ताओं के साथ 2 एनआईबी फाइलों की तरह? – Mat

+0

@Mat: यदि आपके कोशिकाओं के लिए अलग-अलग लेआउट थे तो आप विभिन्न पहचानकर्ताओं का उपयोग करेंगे। तो हाँ, अगर आपके पास दो निब्स थे जिन्हें आपने पूरी तरह से अलग सामग्री के आधार पर लोड किया था। उस स्थिति में, आप गलती से गलत प्रकार की सेल वापस नहीं लेना चाहते हैं। लेकिन आप पृष्ठभूमि रंग या जो कुछ भी सरल परिवर्तनों के लिए इसका उपयोग नहीं करते हैं। –

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

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