2013-02-15 45 views
5

मैं cellForRowIndexPath में सेल्स में आइटम जोड़ रहा हूं (उदा। इशारा पहचानकर्ता, सबव्यू)। यदि सेल का पुन: उपयोग किया जा रहा है (संभवतः) तो मैं इन्हें जोड़ना नहीं चाहता हूं, तो क्या सेल आसानी से बता रहा है या फिर पुन: उपयोग किया जा रहा है?मैं कैसे निर्धारित करूं कि dequeueReusableCellWithIdentifier द्वारा लौटाया गया सेल आईओएस 6 में पुन: उपयोग किया जा रहा है?

सेल प्रोटोटाइप को स्टोरीबोर्ड में परिभाषित किया गया है।

मैं सेल के लिए कस्टम सबक्लास का उपयोग नहीं कर रहा हूं (ओवरकिल जैसा लगता है)। मैं उप-दृश्यों की पहचान करने के लिए सेल टैग का उपयोग कर रहा हूं, इसलिए इसका उपयोग नहीं कर सकता।

मैं प्री-आईओएस 6 दृष्टिकोण का उपयोग कर सकता हूं, लेकिन निश्चित रूप से कुछ आसान करने का एक बेहतर तरीका है?

मुझे कुछ भी ऑनलाइन नहीं मिला, इसलिए डर मैं कुछ के बारे में उलझन में हो सकता है - लेकिन यह खोजना मुश्किल है।

+1

आप उलझन में नहीं हैं, यह पैटर्न को थोड़ा गड़बड़ कर देता है। – jrturton

+0

@jrturton। धन्यवाद। मैं खुद को संदेह करना शुरू कर रहा था। – dommer

+2

यदि आप सेल का पुन: उपयोग कर रहे हैं तो चीजों को जोड़ना नहीं चाहते हैं, तो इसका तात्पर्य है (मुझे लगता है) कि आप जो भी गतिशील तरीके से जोड़ रहे हैं उसे बदल नहीं रहे हैं, तो इन चीजों को आईबी में क्यों शुरू नहीं करें ? – rdelmar

उत्तर

7

इस से निपटने के लिए सबसे आसान तरीका चीजें आप जोड़ने की जरूरत के होने की जाँच करने के लिए है।

तो मान लें कि आपके सेल को टैग 42 के साथ सबव्यूव होना चाहिए यदि यह पहले से मौजूद नहीं है।

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; 
    UIView *subview = [cell viewWithTag:42]; 
    if (!subview) { 
     ... Set up the new cell 
    } 
    else { 
     ... Reuse the cell 
    } 
    return cell; 
} 
1

यह पूर्व-आईओएस 6 (कोई पंजीकृत वर्ग) दृष्टिकोण का उपयोग करने की तुलना में शायद अधिक है, लेकिन यदि आप वास्तव में इसके साथ रहना चाहते हैं, तो आप associated objects का उपयोग कर सकते हैं।

#import <objc/objc-runtime.h> 

static char cellCustomized; 

... 
-(UITableViewCell *)getCell 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellForIdentifier:myCell]; 
    if(!objc_getAssociatedProperty(cell, &cellCustomized)) { 
     [self setupCell:cell]; 
     objc_setAssociatedProperty(cell, &cellCustomized, @YES, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
    } 
    return cell; 
} 

... 

(नहीं परीक्षण किया)

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

  • कोई संबंधित समस्या नहीं^_^