菜鸟教程小白 发表于 2022-12-13 01:36:35

ios - 数据解析后重新加载 UICollection View


                                            <p><p>我正在尝试动态更新 uicollectionview。我用了<a href="https://stackoverflow.com/questions/31735228/how-to-make-a-simple-collection-view-with-swift" rel="noreferrer noopener nofollow">this amazing tutorial</a>关于如何创建一个简单的 uicollection。</p>

<p>在使用静态项目数组时效果很好。我的问题 - 我想让 uicollection 填充我从数据库解析到新数组中的数据。在解析我的 json 数据后,我不确定如何重新加载 uicollection。 </p>

<p><strong>更新后的代码:</strong></p>

<pre><code>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 = ()
    var bookcolor = ()
    var bookdescription = ()
    var bookid = ()

    func posttoapi(){

      //show loading
      LoadingOverlay.shared.showOverlay(view: self.view)

      //send
      let url:URL = URL(string: &#34;http://www.url.com&#34;)!
      let session = URLSession.shared
      var request = URLRequest(url: url)
      request.httpMethod = &#34;POST&#34;
      request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
      let paramString = &#34;user_id=\(user_id)&#34;
      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(&#34;response error&#34;)
                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[&#34;rows&#34;].arrayValue {

                  //push data to arrays
                  self.booknames.append(item[&#34;name&#34;].stringValue)
                  self.bookcolor.append(item[&#34;color&#34;].stringValue)
                  self.bookdescription.append(item[&#34;description&#34;].stringValue)
                  self.bookid.append(item[&#34;id&#34;].int!)

                  //reload uicollection
                  DispatchQueue.main.sync(execute: {
                        self. bookscollection.reloadData()
                  })


                }

            }

      }

      task.resume()

    }




    //------------ collection -------------//

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -&gt; Int {

      print(&#34;collection view code called&#34;)
      return self.booknames.count
    }


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


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



    //------------ end ---------------//

    override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
    }


}
</code></pre>

<p>感谢您的帮助!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我遇到了同样的问题..你的网址有很多图片意味着重新加载 t</p>

<pre><code>dispatch_async(dispatch_get_main_queue(), {
    self.collectionView.reloadData()
})
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 数据解析后重新加载 UICollectionView ,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/44261236/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/44261236/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 数据解析后重新加载 UICollection View