Я использую таблицу с dequeueReusableCellWithIdentifier
и afnetworking+uiimageview
. В некоторых из моих ячеек есть изображения, в некоторых нет. Если я прокручиваю свою таблицу до того, как изображение загрузится, блок успеха поместит изображение в повторно используемую неправильную ячейку. Например, изображение было в ячейке № 2, но после прокрутки оно появляется в ячейке № 8, потому что № 8 в тот момент был на второй позиции. Можно ли использовать setImageWithURLRequest
вместе с dequeueReusableCellWithIdentifier
?
Мой код:
let cell = tableView.dequeueReusableCellWithIdentifier("simpleCell", forIndexPath: indexPath) as UITableViewCell!
cell.textLabel.text = fields[indexPath.row]["name"] as String
cell.imageView.image = nil
if let image = fields[indexPath.row]["image"] as? String {
if (image != "") {
let image_url = NSURL(string: image)
let url_request = NSURLRequest(URL: image_url)
let placeholder = UIImage(named: "no_photo")
cell.imageView.setImageWithURLRequest(url_request, placeholderImage: placeholder, success: { [weak cell] (request:NSURLRequest!,response:NSHTTPURLResponse!, image:UIImage!) -> Void in
if let cell_for_image = cell {
cell_for_image.imageView.image = image
cell_for_image.setNeedsLayout()
}
}, failure: { [weak cell]
(request:NSURLRequest!,response:NSHTTPURLResponse!, error:NSError!) -> Void in
if let cell_for_image = cell {
cell_for_image.imageView.image = nil
cell_for_image.setNeedsLayout()
}
})
}
}
return cell
извините, если мой вопрос дублирует другой. Нашел много похожих вопросов, но решения не нашел. попробовал добавить перезагрузку
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
в мой блок успеха, но это не помогает.
ОБНОВЛЕНИЕ: я также заметил, что у меня нет этой проблемы в случаях, когда все мои ячейки имеют изображения. Если я правильно понял, причина в следующем: AFNetworking прерывает предыдущий запрос для той же ячейки при попытке запросить новое изображение. Но если у меня нет изображения в ячейке, оно не прервется. Как я могу сделать это вручную?