单击时在uicollectionviewcell中切换图像

时间:2019-02-16 22:33:41

标签: ios swift uicollectionview uicollectionviewcell uitapgesturerecognizer

我有一个uicollectionview,其中包含一系列自定义类单元格,这些单元格具有一些textviews和一个uibutton。对于100多个单元格,我只想为每个单元格切换uibutton图像。 uibutton是收藏夹按钮,就像大多数应用一样,我只想收藏和“收藏”不同的单元格。

注意:我试图直接在类中添加手势识别器,但是由于某种原因,图像发生了变化,但是突出显示了多个单元格而不是所单击的特定单元格

我的代码:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! SimpleExampleSubCell
        cell.backgroundColor = UIColor.init(white: 0.10, alpha: 0.25)
        cell.infoLine2TextVw.text = ""
        cell.infoLine3TextVw.text = ""
        if let heading_name = self.dict_dict_holder[indexPath.item]["Name"]{
            cell.headerTextVw.text = heading_name
            cell.infoLine1TextVw.text = self.dict_dict_holder[indexPath.item]["Phone"]
        }
        cell.bringSubview(toFront: cell.headerTextVw)
        cell.favorite_button.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(AddFavorite(withSender:))))
        return cell
    }


    @objc func AddFavorite(withSender sender:UIButton){
        print("clicked")
        //The line below fails each time I run it.
        sender.setImage(newImage.png,.normal)
    }

2 个答案:

答案 0 :(得分:1)

替换

@objc func addFavorite(withSender sender:UIButton){

使用

// not recommended use touchUpInside
@objc func addFavorite(_ sender:UITapGestureRecognizer){
  let btn = sender.view! as! UIButton
}

或更好

cell.favorite_button.addTarget(self, action:#selector(addFavorite), for: .touchUpInside)
  

请勿在按钮上添加手势,因为它们具有自己的目标,如touchUpInside或touchUpOutside以及更多

     

表单元格被重用,您需要在cellForRowAt内将其为零或赋予其他条件

if someCondition { 
   cell.favorite_button.setImage(newImage1.png,.normal)
else { 
  cell.favorite_button.setImage(newImage2.png,.normal)
}

答案 1 :(得分:0)

您必须在 prepareForReuse()方法中为每个单元格设置默认图像(以及要重置的所有内容),以便清除重复使用的内容