2013-03-23 10 views
5

के लिए आलसी लोडिंग तकनीक मेरे पास एक आईओएस एप्लीकेशन है, जो कोशिकाओं के क्षैतिज ग्रिड को प्रदर्शित करने के लिए यूआईसीओलेक्शन व्यू का उपयोग करता है। जब भी उपयोगकर्ता मेरे यूआईसीओलेक्शन व्यू के अंत तक पहुंचता है, तो मुझे केवल डेटा (आलसी) लोड करने का एक चालाक तरीका है। कोड मैं अब का उपयोग करें:UICollectionView

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

    GridCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:Cell forIndexPath:indexPath]; 


    /** 
    TODO 
    - Find a good way to check if the user has reach the end of the grid 
    - This next piece of code is for demonstration purposes. A real check has to be 
    done yet!!! 
    **/ 

    // releases is my datasource // 

    if(indexPath.row == (releases.count - 1)) { 
     [self getNextListData]; 
    } 

    return cell; // <-- finally return the cell 


} 

इस कोड के साथ समस्या है: आगे और पीछे और अधिक आइटम लोड करने के लिए वास्तव में समाप्त करने के लिए तेजी से एक उपयोगकर्ता स्क्रॉल, वह स्क्रॉल करने के लिए है या नहीं। यह वास्तव में उपयोगकर्ता के अनुकूल नहीं है और जब आवश्यक हो तो मुझे आइटम लोड करने का बेहतर तरीका चाहिए।

क्या किसी के पास कोई सुझाव है?

अग्रिम धन्यवाद।

+0

मुझे लगता है कि आप सूची में गिनती को नहीं जानते हैं, क्या यह मामला है? – gaige

उत्तर

2

जब मैं तालिका दृश्यों के साथ इस समस्या में भाग गया, तो मुझे कुछ उपयोगकर्ता परीक्षण करना पड़ा। मैंने पाया कि अगर मैंने टेबल के अंत से पहले 10 लोड लोड किया है, तो नया सेल तैयार होना चाहिए। यह मानते हुए कि आप डेटा की पृष्ठभूमि लोडिंग कर रहे हैं, यानी।

if (indexPath.row >= [releases count] - 10) 
    [self getNextListData]; 

आप यह देखने के लिए कुछ परीक्षण करना चाहते हैं कि आपके लिए कौन सी संख्या काम करती है।

इसके अतिरिक्त, मेरे पास लोडिंग इंडिकेटर सेल भी था। सेक्शन कॉलबैक में मेरी पंक्तियों की संख्या में, मैं हमेशा 1 अतिरिक्त लौटाता हूं।

return [releases count] + 1; 

पंक्ति कॉलबैक के लिए मेरे सेल की शुरुआत में मैंने एक विशेष लोडिंग सूचक सेल वापस कर दिया।

if (indexPath.row == [releases count]) 
    return [JLTActivityCell sharedInstance]; 

मुझे यकीन नहीं है कि संग्रह विचारों पर यह सलाह कैसे लागू होगी, लेकिन उम्मीद है कि यह आपको एक अच्छी दिशा में इंगित करता है।

5

UICollectionViewUIScrollView से विरासत प्राप्त करता है। UIScrollView में एक प्रतिनिधि है, UIScrollViewDelegate जिसमें स्क्रॉलिंग से संबंधित विधियों का एक समूह है। इन प्रतिनिधि तरीकों में से एक (जैसे scrollViewDidBeginDecelerating:) में, आप यह देखने के लिए देख सकते हैं कि contentOffset और contentSize गुणों के साथ आप कितने पेज के साथ हैं। यदि आप अंत के करीब हैं (जो भी% आपके द्वारा अंत है) द्वारा परिभाषित किया गया है, तो अधिक डेटा प्राप्त करें।

स्क्रॉलव्यू विधि का उपयोग करने का एक लाभ यह है कि यह collectionView:cellForItemAtIndexPath: धीमा होने के कारण नहीं होगा (इसे प्रत्येक संग्रहदृश्य के लिए कोड चलाने के लिए मजबूर कर देगा)।

यह मूल रूप से वही तकनीक है जो ऐप्पल UITableView डेटा के आलसी लोडिंग के लिए सुझाती है, थोड़ा अलग तरीके से लागू होती है। उनके पास इसके लिए कुछ नमूना कोड भी है (जैसे कि LazyTableImages)