我想实现一个带有显示图像的单元格的表格 View 。图像将异步加载。为了更好地滚动,我希望如果单元格滚动出 View ,则取消请求。 到目前为止,我的代码有效,但我不知道如何检测单元格是否可见或已经“滚动”。
这是我的代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("EventsTableCell", forIndexPath: indexPath) as! EventsTableCell
var elem : Event = data[indexPath.row] as Event
cell.headlineLabel.text = elem.getName()
cell.secondLabel.text = elem.getDescription()
cell.progressView.setProgress(0.0,animated: true)
if let image = ImageCache.getImage(elem.getId()) {
cell.coverImage.image = image
cell.progressView.removeFromSuperview()
} else {
cell.coverImage.image = UIImage(named: "loading")
if(elem.getCover() == nil){
//NOIMAGE
cell.progressView.removeFromSuperview()
}else{
println("start request for" + elem.getName()!)
cell.request = Alamofire.request(.GET, elem.getCover()!)
.progress {
(_, totalBytesRead, totalBytesExpectedToRead) in
dispatch_async(dispatch_get_main_queue()) {
// 6
cell.progressView.setProgress(Float(totalBytesRead) / Float(totalBytesExpectedToRead), animated: true)
// 7
if totalBytesRead == totalBytesExpectedToRead {
cell.progressView.removeFromSuperview()
}
}
}
.response { (request, response, data, error) in
if error == nil && cell.coverImage.image != nil {
ImageCache.addImage(elem.getId(),image: UIImage(data: data!, scale:1)!)
cell.coverImage.image = UIImage(data: data!, scale:1)
}else{
}
}
}
}
return cell
}
使用以下代码我可以取消请求:
cell.request!.cancel()
我还注意到,progressView有时不显示,或者可能会提前从 super View 中删除,也许有人可以提供帮助。
谢谢 托比亚斯
最佳答案
For better scrolling I want the request to be canceled if the cell scrolls out of the view.
实现tableView:didEndDisplayingCell:forRowAtIndexPath:
,并在其中取消该行的下载。这正是此委托(delegate)方法的用途!
关于ios - Swift 异步图像加载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32096259/