Как добавить разбиение на страницы с данными JSON в collectionview в swift

#ios #swift #xcode #pagination #collectionview

Вопрос:

нам нужно передать счетчик в параметре JSON следующим образом

 var currentPageNumberVM: Int = 0
 "count": currentPageNumber
 

и при вызове службы я получаю данные JSON, как показано ниже, данные JSON поступают, и данные отображаются, collectionview но разбиение на страницы не работает

 func serviceCall(){
self.currentPageNumberVM =10

let param = ["jsonrpc": "2.0",
             "params": ["type" : type, "count": currentPageNumberVM]] as [String : Any]

APIReqeustManager.sharedInstance.serviceCall(param: param, vc: self, url: getUrl(of: .productByFeature), header: header) {(responseData) in
    if responseData.error != nil{
        self.view.makeToast(NSLocalizedString("Something went wrong!", comment: ""))
    }else{
            self.viewmoreDB = ViewMoreBase(dictionary: responseData.dict as NSDictionary? ?? NSDictionary())
            self.productsData = self.viewmoreDB?.result?.products
            self.collectionView.reloadData()
      
    }
}
}
 

Я добавляю значения collectionview , как показано ниже

  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return productsData?.count ?? 0
 }

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "HorizontalSliderCollectionCell", for: indexPath) as! HorizontalSliderCollectionCell
let indexData = productsData?[indexPath.item]
   
cell.lblDescrip.text = indexData?.product_by_language?.des
cell.lblTitle.text = indexData?.product_by_language?.title

return cell
}
 

для разбиения на страницы я пытаюсь, как показано ниже: но ничего не работает

 var isLoading = false

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

        if (offsetY > contentHeight - scrollView.frame.height * 4) amp;amp; !isLoading {
            loadMoreData()
        }
    }

func loadMoreData() {
        if !self.isLoading {
            self.isLoading = true
            DispatchQueue.global().async {
                // Fake background loading task for 2 seconds
                sleep(2)
                // Download more data here
                DispatchQueue.main.async {
                    self.collectionView.reloadData()
                    self.isLoading = false
                }
            }
        }
    }
 

Как добавить разбивку на collectionview страницы ? .. Я имею в виду после загрузки 10 ячеек..ниже нужно показать индикатор активности.. и загрузить еще 10 ячеек

как это сделать, пожалуйста, помогите мне

Комментарии:

1. В чем смысл сна(2)? Это то, что вы редко используете на любом языке программирования, если только вам буквально не нужно замедлить скорость выполнения.

Ответ №1:

Не могли бы вы попробовать это? но сначала обратите внимание, что вам нужно передать счетчик в качестве параметра в функции обслуживания вызовов:

Этот код будет добавлен в ваш cellForItemAt :

  let lastPost = postsArray.count - 1
    if lastPost == indexPath.row {
        if limit < 100{
            limit  = 10
            callAPI()
        }
 

в то время callAPI как функция:

 func callAPI () {
    PostService.getPosts(limit: limit) { (postsArray, error) in
        
        if error == nil {
            guard let postsArray = postsArray else {return}
            self.postsArray = postsArray
            DispatchQueue.main.async {
                self.postsCollectionView.reloadData()
            }
        }
    }
}

}
 

Конечно, вы измените имя в зависимости от вашего проекта.
Надеюсь, это поможет