2009-05-08 14 views
25

मेरे द्वारा बनाए गए UITableViewCell कस्टम के साथ एक अमीर UITableView को लागू कर रहा हूँ बंद हो जाता है, मैं एक फैशन में स्क्रीन पर ये दिखाते हैं, लेकिन मुझे लगता है कि का एक नोट ले जाना चाहते हैं एक बार वे बंद स्क्रीन जाना के बाद से, दूसरी बार वे आते हैं, मैं उन्हें अलग तरीके से प्रदर्शित करना चाहता हूं। स्क्रीन से बाहर जाने पर ऑटो "पढ़ने के रूप में चिह्नित करें" सोचें।का पता लगाने जब UITableViewCell स्क्रीन

मैं किसी सेल को स्क्रीन से बाहर जाने पर पता लगाने के लिए कुछ रास्ता ढूंढ रहा हूं (प्राप्त करें या हटाया गया है या समकक्ष), अधिमानतः: UITableViewController क्लास [indexPath पंक्ति] का त्वरित नोट बनाने के लिए, लेकिन इसमें: UITableViewCell उतना ही अच्छा है।

मैं किसी भी मानक तरीके से ऐसा करने में सक्षम नहीं किया गया ... कई बार ऐसा लगा गिनती सवाल से बाहर लगता है के रूप में मैं कई reloadData मेज पर कॉल करते हैं।

कोई भी विचार? यह लगता है थोड़ा मुश्किल :)

उत्तर

-1

मुझे लगता है कि मैं समय-समय पर UITableView की indexPathsForVisibleRows संपत्ति की जाँच की कोशिश करेंगे। सबसे बड़े सूचकांक पथ से, आप यह समझ सकते हैं कि पिछली पंक्तियों को पिछले स्क्रॉल किया गया है।

+0

हां, यह एक विकल्प होगा, मैं उस फोन को CellForRowAtIndexPath में रख सकता हूं। हालांकि मेरे पास चरम ऊंचाई पंक्तियां हैं, इस प्रकार यह गारंटी नहीं देगा कि ऑफ स्क्रीन सेल को ऑफस्क्रीन के रूप में चिह्नित किया जाएगा: | –

5

मैं तुम्हें अपने UITableView के लिए

- (NSArray *)visibleCells 

विधि इस्तेमाल कर सकते हैं लगता है। यह दिखाई देने वाली सभी कोशिकाओं की एक सरणी देता है। तो आप किसी भी डेटा कि "दिखाई नहीं" (यानी इस सरणी में नहीं) जिस तरह से आप चाहते हैं, इस तरह के हैं कि जब आप इसे वापस करने के लिए स्क्रॉल, यह अद्यतन किया गया है चिह्नित कर सकते हैं।

आशा है कि

1

में मदद करता है क्या आप वाकई एक सेल गुप्त जा रहे हैं कि वास्तव में क्या आप को पकड़ने के लिए चाहते हैं? यदि आप वस्तुओं को पढ़ने के रूप में चिह्नित करना चाहते हैं, तो ऐसा करने के लिए यह उचित तरीका नहीं लगता है। उदाहरण के लिए, मैं तालिका को वास्तव में तेज़ी से स्क्रॉल कर सकता हूं, और यदि आप सभी चीजों को पढ़ने के रूप में चिह्नित करते हैं तो मैं बहुत आश्चर्यचकित हूं।

तकनीकी भाग के लिए, बस स्क्रीन पर मौजूद कोशिकाओं की एक सूची रखें (सेलफोररोएट इंडेक्सपैथ उस सूची में कोशिकाओं को जोड़ना चाहिए), और scrollViewDidScroll प्रतिनिधि विधि जांचें कि उनमें से कोई भी दिखाई नहीं दे रहा है।

एक अन्य संभावित विचार: मुझे याद है वहाँ सेल पर prepareForReuse विधि। यह सुनिश्चित नहीं है कि इसे कब कहा जाता है।

1

UITableViewCell पर prepareForReuse विधि है कि एंड्री Tarantsov का उल्लेख है अच्छा लग रहा है। वहां कुछ एनएसएलॉग्स डालने से आप सेल के किसी भी चर के मानों को प्रिंट कर सकते हैं। किसी भी विचार के रूप में यह तालिका दृश्य नियंत्रक पर वापस कैसे सेट किया जा सकता है?

+0

मैं सिर्फ –

6

एक बार UITableViewCell अदृश्य है, इसे UITableView से निकाल दिया जाएगा। आप -(void)removeFromSuperView विधि को ओवरराइड कर सकते हैं, और विधि के भीतर कुछ कर सकते हैं। अंत में, [super removeFromSuperView] पर कॉल करना न भूलें।

+0

करने के लिए एक प्रतिनिधि का उपयोग करता हूं यह एक विश्वसनीय समाधान प्रतीत नहीं होता है। मैंने अभी आईओएस 6.0 सिम्युलेटर पर इसका परीक्षण किया है, कोशिकाओं को हटाए जाने के बजाय छिपाने के लिए सेट किया गया प्रतीत होता है। विचित्र रूप से पर्याप्त, 'सेटहाइड: हाँ' को मेरे कार्यान्वयन में नहीं कहा जा रहा है! स्पष्ट रूप से तालिका में कार्यान्वयन देखें Ivar सीधे सेट है, संपत्ति सेटर विधि को छोड़ना। –

+0

हटाएं FromSuperView विधि UITableViewCell –

58

यह एक पुरानी सवाल है, लेकिन इस मामले में किसी को भी लग रही है, iOS6 में, एक नया UITableViewDelegate समारोह शुरू की गई थी कि करता है तो बस इस:

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 

यह आपको बता जब भी एक सेल है पर बहुत अच्छा काम करता है हटा दिया गया, हालांकि, यह बहुत गहन है और इस प्रकार यदि आपने एक रीलोड सेल किया है, तो भी पुराना सेल बदल दिया जा रहा है, जो इस प्रतिनिधि समारोह को ट्रिगर करेगा। मेरे कार्यान्वयन में मैं बस यह देखने के लिए जांच करता हूं कि indexPath पास किया गया है, फिर भी tableView.indexPathsForVisibleRows सरणी के भीतर है।कुछ ऐसा:

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if ([tableView.indexPathsForVisibleRows indexOfObject:indexPath] == NSNotFound) 
    { 
     // This indeed is an indexPath no longer visible 
     // Do something to this non-visible cell... 
    } 
} 
+0

उपclassing के बाद कॉल नहीं किया जाता है यह वह समाधान है जिसे मैं ढूंढ रहा हूं, लेकिन आईओएस 5.0 के लिए। कोई सुझाव? –

+0

दुर्भाग्य से ऐप्पल द्वारा प्रदान की गई कुछ भी नहीं। मैंने जो किया वह scrollViewDidScroll का उपयोग था और स्क्रॉलव्यू के पिछले "फ्रेम" के बाद से दृश्यमानल्स एरे बदल गया है, यह देखने के लिए त्वरित गणना करें, इस मामले में मैं अब गायब सेल में कुछ करता हूं। उम्मीद है की वो मदद करदे! –

+0

धन्यवाद! मुझे इसकी ही खोज थी! – Undo

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