如何使用SDWebImage在tableview中显示图片Swift?
How to use SDWebImage to show images in tableview Swift?
我正在尝试从响应 json 中抓取图像 url 并在我的 table 视图中显示该图像。
但问题是 tableview 为所有 tableview 单元格显示相同的图像。
这是我的table查看代码:
enterfunc tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return array_product_name.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CellTableViewCell
cell?.productName.text = array_product_name[indexPath.row]
cell?.productPrice.text = array_product_price[indexPath.row]
let imageU = UserDefaults.standard.string(forKey: "url")
cell?.productImageLbl.sd_setImage(with: URL(string: imageU!))
return cell!
}
我面临的问题是,它为所有 table 视图单元格打印相同的图像。
这是我的 Alamofire 代码:
Alamofire.request("http://192.168.80.21:3204/api/product/get_all_products", headers: headers).responseJSON { [self]
response in
switch response.result {
case .success:
let myresponse = try? JSON(data: response.data!)
print("hello\(myresponse as Any)")
let resultArray = myresponse
self.array_product_name.removeAll()
for i in resultArray!.arrayValue{
let product_name = i["product_name"].stringValue
self.array_product_name.append(product_name)
let product_price = i["price"].stringValue
self.array_product_price.append(product_price)
let product_des = i["description"].stringValue
self.array_product_description.append(product_des)
let product_comName = i["company_name"].stringValue
self.array_product_compamnyName.append(product_comName)
let product_image = i["image_url"].stringValue
self.array_product_image.append(product_image)
self.image_array = product_image
print("Test1:- \(self.image_array)")
UserDefaults.standard.setValue(image_array, forKey: "url")
}
case .failure(_):
print(Error.self)
}
self.tableView.reloadData()
}
您只保存最后一个值数组 url 图像形式数组值 resultArray。
如果要保存数组 url 图片,可以使用:
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedUrlStringArray")
在表格视图中:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CellTableViewCell
cell?.productName.text = array_product_name[indexPath.row]
cell?.productPrice.text = array_product_price[indexPath.row]
let defaults = UserDefaults.standard
let arrayImage = defaults.stringArray(forKey: "SavedUrlStringArray") ?? [String]()
cell?.productImageLbl.sd_setImage(with: URL(string: arrayImage[indexPath.row]))
return cell!
}
不过你也可以使用“array_product_image”,不需要用userdefault保存数组值。
Alamofire.request("http://192.168.80.21:3204/api/product/get_all_products", headers: headers).responseJSON { [self]
response in
switch response.result {
case .success:
let myresponse = try? JSON(data: response.data!)
print("hello\(myresponse as Any)")
let resultArray = myresponse
self.array_product_name.removeAll()
for i in resultArray!.arrayValue{
let product_name = i["product_name"].stringValue
self.array_product_name.append(product_name)
let product_price = i["price"].stringValue
self.array_product_price.append(product_price)
let product_des = i["description"].stringValue
self.array_product_description.append(product_des)
let product_comName = i["company_name"].stringValue
self.array_product_compamnyName.append(product_comName)
let product_image = i["image_url"].stringValue
self.array_product_image.append(product_image)
}
self.tableView.reloadData()
case .failure(_):
print(Error.self)
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return array_product_name.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CellTableViewCell
cell?.productName.text = array_product_name[indexPath.row]
cell?.productPrice.text = array_product_price[indexPath.row]
cell?.productImageLbl.sd_setImage(with: URL(string: array_product_image[indexPath.row]))
return cell!
}
我正在尝试从响应 json 中抓取图像 url 并在我的 table 视图中显示该图像。 但问题是 tableview 为所有 tableview 单元格显示相同的图像。 这是我的table查看代码:
enterfunc tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return array_product_name.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CellTableViewCell
cell?.productName.text = array_product_name[indexPath.row]
cell?.productPrice.text = array_product_price[indexPath.row]
let imageU = UserDefaults.standard.string(forKey: "url")
cell?.productImageLbl.sd_setImage(with: URL(string: imageU!))
return cell!
}
我面临的问题是,它为所有 table 视图单元格打印相同的图像。
这是我的 Alamofire 代码:
Alamofire.request("http://192.168.80.21:3204/api/product/get_all_products", headers: headers).responseJSON { [self]
response in
switch response.result {
case .success:
let myresponse = try? JSON(data: response.data!)
print("hello\(myresponse as Any)")
let resultArray = myresponse
self.array_product_name.removeAll()
for i in resultArray!.arrayValue{
let product_name = i["product_name"].stringValue
self.array_product_name.append(product_name)
let product_price = i["price"].stringValue
self.array_product_price.append(product_price)
let product_des = i["description"].stringValue
self.array_product_description.append(product_des)
let product_comName = i["company_name"].stringValue
self.array_product_compamnyName.append(product_comName)
let product_image = i["image_url"].stringValue
self.array_product_image.append(product_image)
self.image_array = product_image
print("Test1:- \(self.image_array)")
UserDefaults.standard.setValue(image_array, forKey: "url")
}
case .failure(_):
print(Error.self)
}
self.tableView.reloadData()
}
您只保存最后一个值数组 url 图像形式数组值 resultArray。 如果要保存数组 url 图片,可以使用:
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedUrlStringArray")
在表格视图中:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CellTableViewCell
cell?.productName.text = array_product_name[indexPath.row]
cell?.productPrice.text = array_product_price[indexPath.row]
let defaults = UserDefaults.standard
let arrayImage = defaults.stringArray(forKey: "SavedUrlStringArray") ?? [String]()
cell?.productImageLbl.sd_setImage(with: URL(string: arrayImage[indexPath.row]))
return cell!
}
不过你也可以使用“array_product_image”,不需要用userdefault保存数组值。
Alamofire.request("http://192.168.80.21:3204/api/product/get_all_products", headers: headers).responseJSON { [self]
response in
switch response.result {
case .success:
let myresponse = try? JSON(data: response.data!)
print("hello\(myresponse as Any)")
let resultArray = myresponse
self.array_product_name.removeAll()
for i in resultArray!.arrayValue{
let product_name = i["product_name"].stringValue
self.array_product_name.append(product_name)
let product_price = i["price"].stringValue
self.array_product_price.append(product_price)
let product_des = i["description"].stringValue
self.array_product_description.append(product_des)
let product_comName = i["company_name"].stringValue
self.array_product_compamnyName.append(product_comName)
let product_image = i["image_url"].stringValue
self.array_product_image.append(product_image)
}
self.tableView.reloadData()
case .failure(_):
print(Error.self)
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return array_product_name.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CellTableViewCell
cell?.productName.text = array_product_name[indexPath.row]
cell?.productPrice.text = array_product_price[indexPath.row]
cell?.productImageLbl.sd_setImage(with: URL(string: array_product_image[indexPath.row]))
return cell!
}