2012-12-22 15 views
10

मैं एक कस्टम UICollectionViewCell को कार्यान्वित कर रहा हूं, और मैं जानना चाहता हूं कि मॉडल डेटा कैसे भेजना है ताकि डेटा का उपयोग सेल के सबव्यूज़ को प्रारंभ करने के लिए किया जा सके।आईओएस सबक्लास UICollectionViewCell कस्टम इनिट विधि

मैं ऐसा करके मेरी MyCollectionViewCell रजिस्टर ..

[self.collectionView registerClass:[MyCollectionViewCell class] forCellWithReuseIdentifier:@"MyCell"]; 

और निम्न विधि में, मैं करता हूँ ...

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

MyCollectionViewCell* cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath]; 
समस्या का सामना करना पड़ रहा हूँ

है, जब एक सेल 'isn पुन: उपयोग कतार में, यह initWithFrame विधि को कॉल करके एक नया सेल शुरू करता है (जो दस्तावेज़ीकरण पुष्टि करता है)। हालांकि, मैं अपने MyCollectionViewCell वर्ग है, जिसमें एक कस्टम init विधि है ...

-(id) initWithFrame:(CGRect)frame withData: (NSDictionary*) data; 

मैं अपने कस्टम प्रारंभ विधि चाहते बजाय कहा जाता है। मुझे यह कैसे करना है? मैं किसी भी nibs का उपयोग नहीं कर रहा हूँ और मैं प्रोग्रामिंग सब कुछ कर रहा हूँ।

यदि कोई रास्ता नहीं है, और मुझे इसके बजाय initWithFrame विधि का उपयोग करना होगा, तो मैं अपने MyCollectionViewCell में मॉडल डेटा कैसे पास कर सकता हूं ताकि मैं उस डेटा के साथ सबव्यूव्यू प्रारंभ कर सकूं?

धन्यवाद!

उत्तर

6

[सेल initData: डेटा] के बारे में कैसे इसे ठीक करने के बाद? आपको संभवत: डिस्क्लेड सेल पर डेटा को पुनः-इन करने की आवश्यकता है, वैसे भी।

+0

यह। यदि आप किसी सेल का पुन: उपयोग कर रहे हैं, तो आप इनिट के साथ कुछ भी नहीं पारित करेंगे ... इसलिए डेटा सेट अप करना init विधि से अलग होना चाहिए। – jrturton

+1

इसके अलावा, इसे initData पर कॉल न करें। इसे कॉन्फ़िगर करें फॉरडाटा या सेटडाटा (यदि डेटा एक संपत्ति है) कुछ। init ... विधियों को केवल नए आवंटित वस्तुओं पर बुलाया जाना चाहिए। – jrturton

+0

यह समझ में आता है। जब मैं सेटडाटा को कॉल करता हूं और अपने मॉडल डेटा में पास करता हूं, तो मैं इसे 'यूआई' को पुनः लोड करने के लिए सेल को कैसे ट्रिगर करूं? क्या मैं setNeedsLayout को कॉल करता हूं और मेरे कस्टम सेल में एक (शून्य) लेआउट सबव्यूव्यू विधि है? –

0

एक और विकल्प आपके लेआउट को देना होगा एट्रिब्यूट्स डेटा पर पॉइंटर ऑब्जेक्ट करते हैं और सेल को इसके आवेदन में वहां से पकड़ लेते हैं LAoutAttributes: विधि।

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