gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:23:48 36 4
gpt4 key购买 nike

我正在尝试动态更新 uicollectionview。我用了this amazing tutorial关于如何创建简单的 uicollection。

它在使用静态项目数组时效果很好。我的问题 - 我想让 uicollection 填充我从数据库解析到新数组中的数据。我不确定在解析我的 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()
})

关于ios - 数据解析后重新加载 UICollection View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44261236/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com