我正在尝试使用“Facebook状态”填充UITableView原型单元格。它具有图像和视频,具体取决于Facebook服务器的响应。但我无法正确填充它。
我将从阵列中获取第一张图片。但是,当我向下滚动UITableView并再次到达顶部时,图像消失。当我打印i
的值时,它会在加载tableview后很快超过数组的数量。
我在这里添加编辑过的代码。
覆盖func tableView(_ tableView:UITableView,numberOfRowsInSection section:Int) - > Int {
var rows : Int = 0
if section < numberOfRowsAtSection.count{
rows = numberOfRowsAtSection[section]
print(section,rows)
}
return rows
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
print("Section,Row",indexPath.section, indexPath.row)
switch(combinedArray[indexPath.section][indexPath.row]){
case "photo" :
let cell = tableView.dequeueReusableCell(withIdentifier: "ImageDetail", for:indexPath) as! imageCell
if(im < imageDetails.count){
let imageUrl = imageDetails[im]
let url = URL(string:imageUrl)
let data = try? Data(contentsOf: url!)
cell.storyDetailsLbl1.text = photoStoryDetails[im]
print(imageDetails[im])
cell.images1.image = UIImage(data: data!)
}
im = im + 1
return cell
case "video" :
let cell1 = tableView.dequeueReusableCell(withIdentifier: "VideoCell", for: indexPath) as! videoPlayerCell
cell1.videoView.isHidden = false
if vd < videoURLs.count{
print(videoURLs.count)
let urls = videoURLs[vd]
cell1.videoPlayerItem = AVPlayerItem.init(url: urls)
cell1.videoLabel.text = videoStoryDetails[vd]
}
vd = vd + 1
return cell1
case "link":
let cell2 = tableView.dequeueReusableCell(withIdentifier: "LinkCell", for: indexPath) as! linkCell
if ln < linkDetails.count {
cell2.linkLbl.text = linkDetails[ln]
}
ln = ln + 1
return cell2
default:
let cell3 = tableView.dequeueReusableCell(withIdentifier: "StatusCell", for: indexPath) as! statusCell
if st < statusDetails.count{
cell3.statusLbl.text = statusDetails[st]
}
st = st + 1
return cell3
}
}
答案 0 :(得分:0)
Tableviews deque已经创建了单元格并重用它们来提高性能。因此,可以重用具有标识符“ImageDetail”的单元格,并使用来自任何case语句的数据填充该单元格。这会导致图像等奇怪现象消失。
解决此问题的一种方法是确保在每种情况下都处理每个单元属性。 cell.storyDetailsLbl1.text
案件中未处理photo
。 cell.images1.image
案例中未处理link
最好是为每个案例定义一个具有唯一标识符的单元格。即PhotoCell
,LinkCell
,VideoCell
等