2017-03-05 4 views
1

ページネーションをサポートするAPIがあります。collectionviewにもっと読み込む方法は?

"pagination":{ 
    "total":355, 
    "totalPages":10, 
    "page":1, 
    "nextPage":2, 
    "nextPageUrl":"http://api..................?page=2" } 

私の目的は、nextPageUrlの画像を私のcollectionviewに追加することです。 どうすればいいですか?

アドバイスやコードサンプルはありますか?私は迅速に新しいです。ありがとうございます:)

答えて

1

ボタンをコレクションビューの最後に追加する必要があります。そのため、ユーザーがこのボタンを押すたびに、サーバーへの呼び出しが再開されますが、次のページが表示されます。 次に、受け取ったデータを古いものに追加して、collectionView.reloadDataを呼び出します。また、ボタンなしで行うこともできます。ユーザーがコレクションビューの最後に到着したときに自動的に開始されます。

あなたは道秒1行うことができます。あなたは、コレクションビューの下部にあるユーザーがスクロールは、あなたがグローバルスレッド上で、よりロードするための要求をトリガすることができたときに、それを自動化することができます

if (CGRectGetMaxY(scrollView.bounds) == scrollView.contentSize.height) { 
    callToServer() 
} 
0

を新しいデータを使用してコレクションビューを再ロードする準備が整ったときよりも、このアプローチは、もちろんあなたのニーズに合わせて調整する必要があります。擬似コードの例を以下に示します(質問のタグのため速やかに):

class VideoList { 
    var dataModel: [SomeDataModelType] 
    var isLoadingMore = false 

    // .. variables and methods 

    func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 
     let preloadingTreashold = Int(dataModel.count * 0.75) 
     let threasholdReached = indexPath.item >= preloadingTreashold 
     let reachedLastElement = indexPath.item == dataModel.count - 1 
     if !isLoadingMore { 
     loadMore() 
     } 
    } 

// Example function for load more, a little bit pseudocode. 
// The idea is only to illustrate the case. 
    func loadMore { 
    isLoadingMore = true 

    // distpatch loading on global queue, because we don't 
    // want to block the main thread 
    DispatchQueue.global().async { 
     // if your data model is a class You may need to copy it 
     // before You alter it, because otherwise, a user interaction 
     // can trigger an out of bounds exception or some other kind 
     // of nasty problem 
     var tmpDataModel = dataModel.copy() 

     // load new data model 
     var extendedDataModel = loadMore(to: tmpDataModel) 

     DispatchQueue.main.async { 
     // callback for loaid more completed or reloadData call 
     isLoadingMore = false   
     } 
    } 
    } 

    // other methods ... 
} 
関連する問題