我有一个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)
}
答案 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()方法中为每个单元格设置默认图像(以及要重置的所有内容),以便清除重复使用的内容