簡體   English   中英

無限滾動tableView,swift

[英]Infinite scroll tableView, swift

通過一些研究,我發現這種方法對達到我的目的很有用:在表格視圖中分頁。

我要做的是:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offsetY = scrollView.contentOffset.y
    let contentHeight = scrollView.contentSize.height
    
    if offsetY > contentHeight - scrollView.frame.height {

        //print

        if vievModel.!paginationFinished {
            self.viewModel.loadMoreData()
            self.tableView.reloadData()
        }
    }
}

變量 paginationFinished 在我的視圖模型中管理,當我調用加載更多數據時,頁碼增加 1。

問題是,當我向下滾動以加載更多數據時,這段代碼會像所有可能的時間一樣調用我的 viewModel function。

事實上,如果我在代碼行中打印一些內容,當我到達頁面末尾時,它會打印 15 次。

這段代碼有什么問題? 我該如何改進呢? 我想到達頁面的末尾並調用我的loadMoreData一次,因此它將數據加載到 pageCounter 中。 我想我錯過了什么

在 loadMoreData() 方法中添加完成處理程序並使用 boolean 檢查調用,如下所示 -

var isLoadingStarted = true

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offsetY = scrollView.contentOffset.y
    let contentHeight = scrollView.contentSize.height
    
    if offsetY > contentHeight - scrollView.frame.height {
        
        if vievModel.!paginationFinished && isLoadingStarted {
            isLoadingStarted = false
            self.viewModel.loadMoreData {
               self.tableView.reloadData()
               //self.isLoadingStarted = true
            }
            
        }
    }
}

//Handle loadMoreData method as below
static func loadMoreData(_ , completion:@escaping (() -> Void)) {
    .
    .
    .
    completion()
   
}

使用滾動視圖委托來檢測開始拖動並在那里設置標志 isLoadingStarted -

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    self.isLoadingStarted = true
}

試一次。

你需要做一些標記

var isLoading = false

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offsetY = scrollView.contentOffset.y
    let contentHeight = scrollView.contentSize.height
    
    if offsetY > contentHeight - scrollView.frame.height && !isLoading {

        //print

        if vievModel.!paginationFinished {
            isLoading = true
            self.viewModel.loadMoreData()
            self.tableView.reloadData()
            isLoading = false
        }
    }
}

暫無
暫無

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

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