2016-06-14 12 views
2

私はオンラインデータベースの画像を表示するUICollectionViewを持っています。最初に10枚の画像を読み込んだ後、ユーザがUICollectionViewの下にスクロールすると、別の10枚の画像が背景に読み込まれ、表示が更新されます。しかし、そこにプロセスが完了したことを、ユーザーへの表示がされていないと、彼はさらに下にスクロールしない限り、彼は新しいコンテンツがあることを気づかないだろう、今これは完全に正常に動作UICollectionViewの下部にあるUIRefreshControl(詳細データを読み込み)

func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) { 
    if (self.localFeedContent != nil && self.localFeedContent!.count > 0) { 
     if indexPath.item == (self.localFeedContent!.count-1) { 
     loadMoreData() 
    } 
    } 

} 

:私は、次のメソッドを使ってこれを実現します追加されました。 UIRefreshControlを実装したいのですが、これはUICollectionViewの下部に貼り付けられ、画面の上部にある通常のUIRefreshControlとまったく同じ動作を模倣します。私はすでにスクリーンの上に1つを実装していますが、私はどのようにこれを下部で行うのかはわかりません。

答えて

10

私は同様のことを書いています - 私はちょうどUIActivityIndicatorを示す下部に別のセルを返します。だからあなたのデータソースがのようなもののようになります。

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return array.count + 1 
} 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    if indexPath.item == array.count{ 
     // return the new UICollectionViewCell with an activity indicator 
    } 
    // return your regular UICollectionViewCell 
} 

func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) { 
    if indexPath.item == array.count{ 
     // loadMoreData() 
    } 
} 

またはその代わりwillDisplayCellloadMoreData()を呼び出す(あなたはUIActivityIndicatorで新しいUICollectionViewCellを返しているとき)、あなたはcellForItemAtIndexPath方法でそれを呼び出すことができます。いずれもうまくいく可能性があります。

+0

なぜ私がcollectionViewでindexPath.rowを使用しているのかわかりません。おそらくindexPath.itemを意味するのでしょうか? – xaphod

+0

@xaphodはどちらもうまく動作しますが、UICollectionViewとの関連性が高いので、 '.item'を使用して回答を編集します:) – Daven

1

UIRefreshControlを下部に実装する必要はありません。scrollViewメソッドを実装するだけで、スクロールが画面の下部に届くときに何らかのアクションを実行できます。条件内でいくつかのフラグを使用すると、より具体的なアクションをより多く得ることができます。

override func scrollViewDidScroll(scrollView: UIScrollView) { 
     let threshold = 100.0 as CGFloat! 
     let contentOffset = scrollView.contentOffset.y 
     let maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height; 
     if (maximumOffset - contentOffset <= threshold) && (maximumOffset - contentOffset != -5.0) {   //Add ten more rows and reload the table content. 

      runMoreAPI() 
     } 
    } 
+0

ポイントは、APIがデータをロードしていることを示す指標です。 –

+0

このメソッドを実装する最下部にリフレッシュコントロールが表示されない@ kileros –

+0

このメソッドは、スクロールが画面の最下部に来ると 'runMoreApi()'メソッドを実行します。アイデアは:底に達すると、リフレッシュする – kileros

関連する問題