从 URL 下载 UITableIViewCell 图像
Posted
技术标签:
【中文标题】从 URL 下载 UITableIViewCell 图像【英文标题】:UITableIViewCell image downloading from URL 【发布时间】:2016-03-15 09:06:04 【问题描述】:我正在使用 alamofire 从 URL 下载图像。 我在点击时获得了图像,但在视图出现时却没有。 如何在视图出现时获取所有图像?这是我用来实现这一目标的代码:
import UIKit
import Alamofire
import SwiftyJSON
import SDWebImage
import Kingfisher
class Paragogoi: UITableViewController
var data=[FronItem]()
override func viewDidLoad()
super.viewDidLoad()
Alamofire.request(.GET, "http://gaiaskarpos.com/getCategores.php").validate().responseJSON response in
switch response.result
case .Success:
if let value = response.result.value
let json = JSON(value)
let list: Array<JSON> = json.arrayValue
var urls=[String]()
for element in list
let id:String=element["id"].stringValue
let name:String=element["name"].stringValue
let url:String=element["url"].stringValue
self.data.append(FronItem(id:id,name:name,url:url))
;
self.tableView.reloadData()
case .Failure(let error):
print(error)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return data.count
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("paragogosCell", forIndexPath: indexPath)
cell.textLabel?.text = data[indexPath.row].name
asycloadp(data[indexPath.row].url!, imageView: cell.imageView!)
return cell
func asycloadp(url:String,imageView:UIImageView)
let downloadQueue=dispatch_queue_create("myqueue", nil)
print(url)
dispatch_async(downloadQueue)
let imageUrl:NSURL?
= NSURL(string:url)
dispatch_async(dispatch_get_main_queue())
imageView.sd_setImageWithURL(imageUrl)
我应该添加除此之外的任何内容吗?
【问题讨论】:
【参考方案1】:因为dispatch_async是异步传输,所以下载图片后需要刷新table view,但是我看到你用的是SDWebImage,那么就不需要函数asycloadp了,换个代码再试试吧。
import UIKit
import Alamofire
import SwiftyJSON
import SDWebImage
import Kingfisher
class Paragogoi: UITableViewController
var data=[FronItem]()
override func viewDidLoad()
super.viewDidLoad()
Alamofire.request(.GET, "http://gaiaskarpos.com/getCategores.php").validate().responseJSON response in
switch response.result
case .Success:
if let value = response.result.value
let json = JSON(value)
let list: Array<JSON> = json.arrayValue
var urls=[String]()
for element in list
let id:String=element["id"].stringValue
let name:String=element["name"].stringValue
let url:String=element["url"].stringValue
self.data.append(FronItem(id:id,name:name,url:url))
;
self.tableView.reloadData()
case .Failure(let error):
print(error)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return data.count
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("paragogosCell", forIndexPath: indexPath)
cell.textLabel?.text = data[indexPath.row].name
let imageUrl:NSURL? = NSURL(string:url)
cell.imageView!.sd_setImageWithURL(imageUrl, completed:(image: UIImage?, error: NSError?, cacheType: SDImageCacheType!, imageURL: NSURL?) in
if (image != nil)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
)
return cell
【讨论】:
是的,我尝试过这种情况,但点击单元格时会获取图像。 @adhslock 我再次更新了代码,这个应该可以工作,我已经测试过了。 @adhslock 不客气,谢谢你接受我的回答 :)【参考方案2】:从服务器获取所有数据后,只需在主线程中重新加载您的 tableView
。
dispatch_async(dispatch_get_main_queue())
self.tableView.reloadData()
【讨论】:
我看不到图片 execpt make click on cell以上是关于从 URL 下载 UITableIViewCell 图像的主要内容,如果未能解决你的问题,请参考以下文章