首页 > 解决方案 > 为什么在swift中为collectionView多次调用willDisplay?

问题描述

我正在使用带有分页的collectionView,但是willDisplay方法被多次调用,我不知道为什么。如果有人有任何想法,请帮助我...................................................... ............

func collectionView(_ collectionView: UICollectionView, willDisplay cell: func scrollViewDidScroll(_ scrollView: UIScrollView) {
    guard gridCollectionView!.contentOffset.y >= (gridCollectionView!.contentSize.height - gridCollectionView!.bounds.size.height),
          !isRefreshing else { return }
    isRefreshing = !isRefreshing
    offset += limit
    
    getAllExcrcise(keyword: "", limit: limit, offset: offset)
    
}

API调用函数

func getAllExcrcise(keyword: String = "", limit: Int = 10, offset: Int = 0, clearAll:Bool = false) {
    
    if clearAll {
        self.allExcercise.removeAll()
    }
    
    var params = [String: Any]()
    params = [
                "keyword": keyword,
                "limit": limit,
                "offset": offset,
                "muscle" : bodyPartSelectedArr,
                "equipment": categorySelectedArr
        
             ]
    
    WebServiceHelper.postWebServiceCall(Constants.baseURL + "getAllExcercises", params: params, isShowLoader: true, success: { (responceObj) in
        
        let statusMsg = GetAllExcerciseLevelOneData(json: responceObj)
        
        if statusMsg.status {
            let respArr = responceObj["data"].arrayValue
            for item in respArr {
                let dataModel = GetAllExcercise(json: item)
                
                for selectedVal in self.selectedItem {
                    if selectedVal.id == dataModel.id {
                        dataModel.isCellSelected = true
                    }
                }
                
                self.allExcercise.append(dataModel)
            }
            self.totalPages = statusMsg.totalPages
        } else {
            //CommonUtils.showToastMessage(message: statusMsg.message ?? "")
        }
        
        self.tableView?.reloadData()
        self.gridCollectionView?.reloadData()
    }
   , failure: { (failure) in
        print(failure)
   })
}

标签: iosswiftuicollectionviewuikit

解决方案


您可以检查将在willDisplay方法中显示的单元格的当前索引,以及它的最后一个数组索引是否比您必须调用getNextPageData。在获取数据时,您可以显示加载指示器,该指示器显示当前正在进行的数据加载。


推荐阅读