2013-03-23 5 views
5

IOS 어플 리케이션이 있는데, 이는 셀의 수평 그리드를 표시하기 위해 UICollectionView를 사용합니다. 필요한 모든 것은 사용자가 내 UICollectionView가 끝날 때 데이터를로드하는 영리한 방법입니다. 내가 지금 사용하는 코드는 다음과 같습니다이 코드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:)에서 contentOffsetcontentSize 속성을 사용하여 페이지의 현재 위치를 확인할 수 있습니다. 마지막에 가까울 경우 (%는 끝으로 정의 됨) 더 많은 데이터를 가져옵니다.

scrollview 메서드를 사용할 때의 이점은 collectionView:cellForItemAtIndexPath:이 느려질 수 있다는 것입니다 (모든 collectionview에 대한 코드를 불필요하게 실행하도록하여).

이것은 기본적으로 애플이 약간 다른 방식으로 적용한 UITableView 데이터의 지연로드에 대해 제안한 것과 동일한 기술입니다. 그들도 그것을위한 약간의 샘플 코드를 가지고있다. (예 : LazyTableImages)

관련 문제