在数据解析后重新加载UICollection视图



我正在尝试动态更新UicollectionView。我使用了有关如何创建简单的uicollection的惊人教程。

使用静态项目时,它效果很好。我的问题 - 我想将uicollection填充,然后将数据解析为DB的新数组。在解析JSON数据后,我不确定如何重新加载UICollection。

更新带有答案的代码:

import UIKit
class Books: UIViewController, UICollectionViewDelegate {
    @IBOutlet weak var bookscollection: UICollectionView!
    var user_id: Int = 0;
    //------------ init ---------------//
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func viewDidAppear(_ animated: Bool) {
        showtutorial()
        getuserid()
    }

    //------------ show books ---------------//
    var booknames = [String]()
    var bookcolor = [String]()
    var bookdescription = [String]()
    var bookid = [Int]()
    func posttoapi(){
        //show loading
        LoadingOverlay.shared.showOverlay(view: self.view)
        //send
        let url:URL = URL(string: "http://www.url.com")!
        let session = URLSession.shared
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
        let paramString = "user_id=(user_id)"
        request.httpBody = paramString.data(using: String.Encoding.utf8)
        let task = session.dataTask(with: request as URLRequest) {(data, response, error) in
            //hide loading
            LoadingOverlay.shared.hideOverlayView()
            //no response
            guard let data = data, let _:URLResponse = response, error == nil else {
                print("response error")
                return
            }
            //response, parse and send to build
            let json = String(data: data, encoding: String.Encoding.utf8);
            if let data = json?.data(using: String.Encoding.utf8){
                let json = try! JSON(data: data)
                for item in json["rows"].arrayValue {
                    //push data to arrays
                    self.booknames.append(item["name"].stringValue)
                    self.bookcolor.append(item["color"].stringValue)
                    self.bookdescription.append(item["description"].stringValue)
                    self.bookid.append(item["id"].int!)
                    //reload uicollection 
                    DispatchQueue.main.sync(execute: {
                        self. bookscollection.reloadData()  
                    })

                }
            }
        }
        task.resume()
    }


    //------------ collection -------------//
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        print("collection view code called")
        return self.booknames.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = bookscollection.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! BooksCell
        cell.myLabel.text = self.booknames[indexPath.item]
        cell.backgroundColor = UIColor.cyan // make cell more visible in our example project
        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("You selected cell #(indexPath.item)!")
    }

    //------------ end ---------------//
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

感谢您的任何帮助!

我遇到的相同问题..您的URL有很多图像意味着重新加载t

dispatch_async(dispatch_get_main_queue(), {
    self.collectionView.reloadData()
})

最新更新