我有一个自定义UITableViewCell
,可以显示带有缩略图的视频。我是以编程方式添加缩略图UIImageView
。但是,当我的UITableView
中有一行以上时, UIImageView
显示在其他所有单元格中。例如,如果我有2个单元格,UIImageView
在单元格1中显示正常,但单元格2 UIImageView
在单元格3中显示。抱歉,如果这令人困惑。如果还需要更多信息,请告诉我。
以下是我在cellForIndexPath
中使用的代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("videoCell")! as! VideoCell
cell.selectionStyle = UITableViewCellSelectionStyle.None // get rid of highlight when tapping a cell
if videoCollections.count > 0 {
let singleVideoCollection = videoCollections[indexPath.row]
// get video clips from PFRelation
let clips = singleVideoCollection.relationForKey("clips")
let query = clips.query()
query.findObjectsInBackgroundWithBlock { (clipObjects, error) -> Void in
if error == nil {
for (index, clip) in (clipObjects?.enumerate())! {
if index == 0 { // first clip
let firstThumbnailImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 54, height: 54))
firstThumbnailImageView.center = cell.center
firstThumbnailImageView.layer.cornerRadius = firstThumbnailImageView.frame.height / 2
firstThumbnailImageView.clipsToBounds = true
let thumbnail = clip.objectForKey("thumbnail")
thumbnail!.getDataInBackgroundWithBlock { (imageData: NSData?, error: NSError?) -> Void in
if (error == nil) {
firstThumbnailImageView.image = UIImage(data:imageData!)
cell.contentView.addSubview(firstThumbnailImageView)
}
}
}
}
}
}
return cell
}
}
答案 0 :(得分:0)
如果您不理解重复使用tableview单元格,建议您在委托方法中设置与元素绑定的UI元素的隐藏属性。
添加像这样的代码
if (clipObjects![indexPath.row].objectForKey("thumbnail")) {
thumbnail.hidden = false
} else {
thumbnail.hidden = true
}
答案 1 :(得分:0)
当getDataInBackgroundWithBlock
完成下载imageData
时,单元格对象可能已经被重用于不同的indexPath。
当您使用dequeueReusableCellWithIdentifier
和cell.contentView.addSubview()
时,您将添加过多的子视图。
所以你可以尝试以下代码。
class VideoCell: UITableViewCell {
//......
let firstThumbnailImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 54, height: 54))
override func prepareForReuse() {
super.prepareForReuse()
firstThumbnailImageView.image=nil;
}
//......
}
func tableView(tableView : UITableView, cellForRowAtIndexPath indexPath : NSIndexPath)->UITableViewCell {
//......
// let firstThumbnailImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 54, height: 54))
cell.firstThumbnailImageView.center = cell.center
cell.firstThumbnailImageView.layer.cornerRadius = firstThumbnailImageView.frame.height / 2
cell.firstThumbnailImageView.clipsToBounds = true
let thumbnail = clip.objectForKey("thumbnail")
//......
//cell.contentView.addSubview(firstThumbnailImageView)
//......
}