提问人:abdallah eslah 提问时间:5/22/2021 最后编辑:abdallah eslah 更新时间:5/23/2021 访问量:234
使用 ImageSlideshow 窗格时显示上一个 tableview 单元格中的重复图像
showing duplicated images from previous tableview cell when using ImageSlideshow pod
问:
这是我的回应,哪个媒体是我想要在TableView中水平显示的幻灯片视图中的图像:
media": [
{
"id": 555,
"postId": 274,
"media": "https://onebusinessqrcode.s3.us-east-2.amazonaws.com/b885b600-2d2c-5d84-aa64-259e946763e9.png",
"createdAt": "2021-05-22T04:01:03.351Z",
"updatedAt": "2021-05-22T04:01:03.351Z"
},
{
"id": 554,
"postId": 274,
"media": "https://onebusinessqrcode.s3.us-east-2.amazonaws.com/81a71835-1808-5d16-b9ff-062a345a9612.png",
"createdAt": "2021-05-22T04:01:03.154Z",
"updatedAt": "2021-05-22T04:01:03.154Z"
}
]
但是突然我发现我在同一表视图行的视图中得到了这样的重复图像,并且我没有一个单元格的所有图片,您知道它可能来自可重复使用的单元格!可能是从数组中得到的图像,我突然重复了它!!:
滚动时单元格中的图像数增加
// arr to store all images I got from server to show them
var postImages = [SDWebImageSource]()
在 cellForRowAt for tableView 中:
//Configure the cell...
let postText = ArraysModel.posts[indexPath.row]
if let pictureString = postText.media {
let cell = tableView.dequeueReusableCell(withIdentifier: "PicCell", for: indexPath) as! PicCell
cell.postTextLabel.text = postText.postText
for image in pictureString {
let sources = SDWebImageSource(urlString: image.media ?? "")
if let sdImages = sources {
postImages.append(sdImages)
}
}
cell.slideShowImage.setImageInputs(postImages)
cell.slideShowImage.contentScaleMode = UIViewContentMode.scaleAspectFill
cell.slideShowImage.activityIndicator = DefaultActivityIndicator()
cell.slideShowImage.delegate = self
return cell
}
答:
0赞
Mohammed Abdul Basith
5/23/2021
#1
您可以在 PicCell 类中添加它
override func prepareForReuse() {
super.prepareForReuse()
self.slideShowImage.setImageInputs([])
self.postImages.removeAll()
}
并像这样更改您的tableview委托方法
let postText = ArraysModel.posts[indexPath.row]
if let pictureString = postText.media {
let cell = tableView.dequeueReusableCell(withIdentifier: "PicCell", for: indexPath) as! PicCell
cell.postTextLabel.text = postText.postText
cell.prepareForReuse()
for image in pictureString {
let sources = SDWebImageSource(urlString: image.media ?? "")
if let sdImages = sources {
postImages.append(sdImages)
}
}
cell.slideShowImage.setImageInputs(postImages)
cell.slideShowImage.contentScaleMode = UIViewContentMode.scaleAspectFill
cell.slideShowImage.activityIndicator = DefaultActivityIndicator()
cell.slideShowImage.delegate = self
return cell
}
评论
0赞
abdallah eslah
5/23/2021
谢谢你解决了你真的帮助了我兄弟^^你能给我解释一下准备 froReuse 以及为什么我从数组中删除项目
0赞
Mohammed Abdul Basith
5/23/2021
如果 UITableViewCell 对象是可重用的(即,它具有重用标识符),则在从 UITableView 方法 dequeueReusableCell(withIdentifier:) 返回对象之前调用此方法。出于性能原因,应仅重置单元格中与内容无关的属性,例如 alpha、编辑和选择状态。在重用单元格时,tableView(_:cellForRowAt:) 中表视图的委托应始终重置所有内容。如果单元格对象没有关联的重用标识符,则不会调用此方法。
0赞
Mohammed Abdul Basith
5/23/2021
如果重写此方法,则必须确保调用超类实现。
评论