簡體   English   中英

嘗試使用willDisplayCell在Swift UItableView中實現無限滾動。 要控制一次增量

[英]Trying to implement infinite scroll in Swift UItableView using willDisplayCell. Want to control the increment to be done once

到目前為止,這是我嘗試過的:

override func collectionView(_ collectionView: UITableView, willDisplay cell: UICollectionViewCell, forRowAt indexPath: IndexPath) {
    if (indexPath.row == self.dataArray.count-30) {
        pageNumber += 1
        self.downloadTask()
    }
}

self.downloadTask()將使用pageNumber並下載適當的數據。

現在剩下30或更多行要顯示,頁碼正不斷增加很多次,我只想限制一次,直到self.downloadTask()完成執行,然后又回來,又剩下30行以顯示在UITableView中。

我該如何以這樣的方式進行操作:pageNumber僅每增加1一次,就剩下30行顯示在UITableView中。

我將數組計數檢查更改為3並能夠實現它。 更新后的代碼如下所示:

override func collectionView(_ collectionView: UITableView, willDisplay cell: UICollectionViewCell, forRowAt indexPath: IndexPath) {
if (indexPath.row == self.dataArray.count-3) {
    pageNumber += 1
    self.downloadTask()
}

}

我懷疑將30更改為3只會減少問題的發生率,而無法實際解決。 在頁面加載之間和/或當用戶快速滑動時,滾動也可能顯得不穩定或無響應。

我建議使用絕對(而不是相對)計算來確定何時需要下載新數據。

例如,如果您的downloadTask()函數一次獲取30個項目,則可以在顯示最后一個塊中的任何一項后,以30個項目塊處理dataArray並獲取下一個塊(頁面):

let wantPage = indexPath.row / 30 + 1
if wantPage > pageNumber
{
   pageNumber = wantPage
   downloadTask()
}

如果downloadTask()一次少於30個項目,並且您希望數據比集合視圖的滾動位置提前30個項目,則可以將該數字簡單地添加到塊(頁面)計算中:

let itemsPerPage = 10 
let wantPage     = (indexPath.row + 30) / itemsPerPage
if wantPage > pageNumber
{
   pageNumber = wantPage
   downloadTask()
}

您的pageNumber變量最終將到達沒有更多數據可用的點(即,少於每頁的項目),並且這種“絕對”計算將自動停止調用downloadTask()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM