在一个tableviewcell效应中所做的更改其他单元格

问题描述:

我的问题是,我有一个tableview与一些单元格。这些单元格内部有图像,如果它们被录像,则会显示绿色边框。如果我有很多细胞,并且例如点击第一个细胞中的第一个图像,那就是问题发生的时间。当我开始快速向下滚动表格时,其他相同类型的单元格也具有带有绿色边框的第一张图片,即使它们在单元格编号13之类。我认为那是因为它们是可重复使用的单元格,但我怎样才能确保只有被录制的单元格能够保持这种变化?希望你们明白我的意思,我知道这有点令人困惑。这是两个自定义单元中的一个,代码将边框变成绿色。类型bouncingRoundImages的图像只是UIImages,我创建了UIImage的自定义子类,使它们反弹。在一个tableviewcell效应中所做的更改其他单元格

class TwoPicsTableViewCell: UITableViewCell { 

@IBOutlet var containerView: UIView! 
@IBOutlet var firstImage: bouncingRoundImageView! 
@IBOutlet var secondImage: bouncingRoundImageView! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
    containerView.layer.cornerRadius = 10 
    containerView.clipsToBounds = true 

    setupFirstImage() 
    setupSecondImage() 
} 


func setupFirstImage() { 

    let tappedOne = UITapGestureRecognizer(target: self, action: #selector(checkPicTwo)) 
    firstImage.addGestureRecognizer(tappedOne) 
} 

func setupSecondImage() { 
    let tappedTwo = UITapGestureRecognizer(target: self, action: #selector(checkPicOne)) 
    secondImage.addGestureRecognizer(tappedTwo) 
} 

func checkPicTwo() { 

    firstImage.bouncing() 

    if secondImage.layer.borderWidth != 0 { 
     secondImage.layer.borderWidth = 0 
    } 
} 

func checkPicOne() { 

    secondImage.bouncing() 

    if firstImage.layer.borderWidth != 0 { 
     firstImage.layer.borderWidth = 0 
    } 
} 


} 
+1

使用您的'cellForRowAtIndexPath'方法和您的表视图控制器中更新您的表视图的单元格的任何其他代码更新您的问题。 – rmaddy

这听起来像一个可重复使用的细胞问题。尝试在prepareForReuse中将图像设置为nil和borderWidth为0。

override func prepareForReuse() 
{ 
    super.prepareForReuse() 
    firstImage.image = nil 
    secondImage.image = nil 
    firstImage.layer.borderWidth = 0 
    secondImage.layer.borderWidth = 0 
} 
+0

这有点作用:D它解决了未被挖掘的细胞没有边界的问题,但是当我向后滚动时,最初敲击的细胞也不再具有边界颜色。有没有一种好的方法来处理这个问题? –

+0

你需要有一个属性,说明它是否被选中。然后在cellForRowAtIndexPath中,你可以检查这个属性是否给它一个边框。 –

+0

好吧我会试着弄清楚如何做到这一点。如果您可以提供一些示例代码Morten Stulen,那将会很棒!感谢您的帮助 –