我从网络中调用数据进行无限滚动和“推送刷新”,现在无限滚动可以正常工作,但是“拖动刷新”不起作用,因为我不知道我必须在refreshAction函数中编写哪种代码。

NetworkRequestAPI请求

import Foundation

class NetworkRequestAPI {

static func getPropductListByCategory(productId : Int, pageNo : Int , completion: @escaping ([Product]? , Error?) -> ()){



    let url = URL(string: Configuration.BASE_URL+"/product-by/type?product_type_id="+String(productId)+"&page="+String(pageNo))



    var categoryObject = [Product]()



    URLSession.shared.dataTask(with:url!) { (urlContent, response, error) in

        if error != nil {


        }
        else {
            do {
                let json = try JSONSerialization.jsonObject(with: urlContent!) as! [String:Any]



                let products = json["products"] as? [String: Any]
                //   productCount = (json["product_count"] as? Int)!

                let items = products?["data"] as? [[String:Any]]



                items?.forEach { item in

                    let oProduct = Product()

                    oProduct.product_id = item["product_id"] as? Int
                    oProduct.product_name = item["product_name"] as? String

                    oProduct.product_image = item["product_image"] as? String



                    let ratingItem = item["rating_info"] as? [String: AnyObject]

                    let rating = RatingInfo()
                    rating.final_rating = ratingItem?["final_rating"] as? String

                    oProduct.rating_info = rating


                    categoryObject.append(oProduct)
                }
                completion(categoryObject, nil)

            } catch let error as NSError {

                print(error)
                completion(nil, error)
            }
        }


        }.resume()
}


}


ListTableView类

class ListTableView: UITableViewController {



    var isInitUILoad = true

    var arrProduct = [[Product]]()

    var product_id:Int = 0

    var pageNo = 1


    override func viewDidLoad() {
        super.viewDidLoad()

        self.initUILoad()




        let refreshControl = UIRefreshControl()


        if #available(iOS 10.0, *) {
            tableView.refreshControl = refreshControl
        } else {
            tableView.addSubview(refreshControl)
        }


        refreshControl.addTarget(self, action: #selector(refreshWeatherData(_:)), for: .valueChanged)


    }


    @objc private func refreshWeatherData(_ sender: Any) {

        //
        // what codes have to add here
        //


        self.refreshControl?.endRefreshing()
    }



func initUILoad(){

    ActivityIndicator.customActivityIndicatory(self.view, startAnimate: true)

    NetworkRequestAPI.getPropductListByCategory(productId: product_id, pageNo: pageNo) { (products, error) in

        DispatchQueue.main.async(execute: {
            if products != nil {
                // self.totalItemLabel.text = String(self.product_count) + " products"
                self.pageNo += 1
                // self.product_count = productCount
                //self.arrProduct = products!
                self.arrProduct.append(products!)
                print(self.arrProduct.count)
                // self.tableView?.reloadData()
            }else{
                print(error.debugDescription)

            }

            ActivityIndicator.customActivityIndicatory(self.view, startAnimate: false)
            // self.totalItemLabel.text = String(self.product_count) + " products"
            self.tableView?.reloadData()
            self.isInitUILoad = false
        })
    }

}

func loadMore(complition:@escaping (Bool) -> ()) {

    NetworkRequestAPI.getPropductListByCategory(productId: product_id, pageNo: pageNo) { (products, error) in

        DispatchQueue.main.async(execute: {
            if error != nil{
                print(error.debugDescription)
            }
            if products != nil && products?.count ?? 0 > 0{
                // self.totalItemLabel.text = String(self.product_count) + " products"
                self.pageNo += 1
                // self.product_count = productCount
                // self.arrProduct = products!
                self.arrProduct.append(products!)
                self.tableView?.insertSections([self.arrProduct.count - 1], with: .fade)
                // self.tableView?.reloadData()

            }else{
                print("no product left")

            }
            complition(true)

        })
    }
}

}

最佳答案

@objc private func refreshWeatherData(_ sender: Any) {

    NetworkRequestAPI.getPropductListByCategory(productId: product_id, pageNo: 1) { (products, error) in

        DispatchQueue.main.async(execute: {
            if products != nil {
                // self.totalItemLabel.text = String(self.product_count) + " products"

                self.arrProduct = products!
                print(self.arrProduct.count)

            }else{
                print(error.debugDescription)

            }

            self.refreshControl?.endRefreshing()
            // self.totalItemLabel.text = String(self.product_count) + " products"
            self.tableView?.reloadData()
            self.isInitUILoad = false
        })
    }
}

关于ios - 拉动刷新不适用于无限滚动中的JSON请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45954092/

10-09 10:12