2012-05-03 18 views
5

हम सभी जानते हैं कि uitableview में सेल का पुनरुत्थान किया जा सकता है, लेकिन मुझे कुछ अजीब परिणाम दिखाई दे रहे हैं। मैं एक कस्टम सेल बना रहा हूं, प्रत्येक सेल में 4 कॉलम हैं, प्रत्येक कॉलम में एक छवि है इसलिए प्रारूप इस | img | img | img | img | सेल के लौटने के बाद , मैं प्रत्येक सेल को कॉन्फ़िगर कर रहा हूं, एक उदाहरण चित्र 1 के लिए पहला कॉलम कॉन्फ़िगर कर रहा है, फिर अलग-अलग चित्रios uitableview uitableviewcell reuse का पुराना डेटा

अब यह मानते हुए कि मैं केवल तालिका में एक पंक्ति में दो पंक्तियां प्रदर्शित कर सकता हूं :

|a0|a1|a2 |a3 | 
|b4|b5|b6 |b7 | 
------cell c not visible to user------ 
|c8|c9|c10|c11| 
नीचे उपयोगकर्ता स्क्रॉल, स्तंभ 'एक' (a0-A3) ऊपर, अदृश्य हो जाएगा, और जहाँ तक मुझे पता है कि सेल अदृश्य हो जाता स्तंभ सी

उपरोक्त उदाहरण के लिए दोबारा इस्तेमाल किया जाएगा के रूप में

ठीक काम करता है, अगर मैं पूरी तरह से हर सेल/पंक्ति पर कब्जा कर सकता हूं, यानी मेरे पास कुल 12 चित्र हैं।

लेकिन अगर मैं 10 चित्रों का कहना है (अंतिम पंक्ति केवल 2 से भर दिया जाएगा, और अन्य दो खाली हैं, के रूप में की तरह है:

|a0|a1|a2 |a3 | 
|b4|b5|b6 |b7 | 
------row/cell 'c' not visible to user------ 
|c8|c9|empty|empty| 

हालांकि, समस्या पैदा होती है, जब मैं अप करने के लिए स्क्रॉल देखना सेल/पंक्ति 'सी' मैं निम्नलिखित तस्वीर:

|a0|a1|a2 |a3 | 
------row/cell 'a' not visible to user------ 
|b4|b5|b6 |b7 | 
|c8|c9|a2|a3| 

सूचना है कि पंक्ति/सेल सी के अंतिम दो कॉलम खाली होना चाहिए, लेकिन A2 और a3 बजाय

दिखा रहा हैमैं इसे कैसे ठीक कर सकता हूं? मैं ऐसा करने के मैन्युअल तरीके के बारे में सोच रहा हूं, यानी यह जांच कर कि क्या मुझे अनावश्यक विचारों को फिर से उपयोग करना चाहिए, लेकिन अधिक जटिल हो सकता है क्या यह आसान और क्लीनर करने का एक और व्यवस्थित तरीका है?

क्या कोई तरीका है कि हम लौटाए गए सेल से इसकी सामग्री भूलने के लिए कह सकते हैं, या क्या मुझे यह करना है?

धन्यवाद

उत्तर

7

मुझे हाल ही में एक समान समस्या थी। टेबलव्यू सेल ने इसे सबक्लास के बाद फॉररियस तैयार किया है। here

+0

उत्तर के लिए खेद है, मूल लेखक या समुदाय के लिए प्रश्न का पालन करें: https://developer.apple.com/documentation/uikit/uitableviewcell/1623223-prepareforreuse पर ऐप्पल के डेवलपर दस्तावेज़ों को पढ़ना readyForReuse में सामग्री से संबंधित सामग्री से निपटें, बल्कि cellForRowAt। क्या किसी के पास कोई स्पष्टीकरण है कि स्वीकार किए गए उत्तर आधिकारिक दस्तावेज़ीकरण के साथ क्यों संघर्ष करते हैं? –

9

आपको "इसे स्वयं करना" है। जब भी UITableViewCell का पुन: उपयोग किया जाता है, तो यह अपनी पिछली सामग्री को बरकरार रखता है। अगर आप इसे रीसेट/साफ़ करना चाहते हैं, तो आपने इसे मैन्युअल रूप से किया है।

अपने कस्टम UITableViewCell में, आप prepareForReuse ओवरराइड कर सकते हैं और नई सामग्री सेट करते समय अपनी इच्छित सामग्री को रीसेट कर सकते हैं।

अपने मामले में, UIImageView की image संपत्ति को सभी चार कॉलम में nil पर सेट करना चाहिए।