#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()
}
}
}
}
}
Конечно, вы измените имя в зависимости от вашего проекта.
Надеюсь, это поможет