为什么在UICollectionViewCell中向按钮添加动作不能正常工作?

时间:2016-07-31 20:18:46

标签: swift uibutton uicollectionview uicollectionviewcell

我有CollectionView,它有多个动态单元格,foreach单元格有按钮,这里有添加项目数量的动作,这是我的简单代码:

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    if ids.count == 0
    {
        return 3
    }else
    {
    return ids.count
    }

}




func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {


    if ids.count == 0
    {
        let cell = myCollection.dequeueReusableCellWithReuseIdentifier("loadingItems", forIndexPath: indexPath)

        return cell


    }else
    {
  let  cell =myCollection.dequeueReusableCellWithReuseIdentifier("cellProduct", forIndexPath: indexPath) as! productsCollectionViewCell

      cell.addItems.addTarget(self, action: #selector(homeViewController.addItemsNumberToCart(_:)), forControlEvents: UIControlEvents.TouchUpInside) 
  }







    return cell

    }
}

这是添加项目的方法

func addItemsNumberToCart(sender:UIButton)
{

sender.setTitle("Added to cart", forState: UIControlState.Normal)

}

这是我的collectionViewCell类

import UIKit

class productsCollectionViewCell: UICollectionViewCell {


    @IBOutlet weak var addItems: UIButton!

}

它正在工作和更改值,但它是多行的更改值,不仅是所选行,现在任何人都有什么问题?

1 个答案:

答案 0 :(得分:3)

看起来您正在添加目标但从未删除它。因此,当细胞被重复使用时,按钮会累积多个目标。有几种方法可以解决这个问题;一个是在prepareForReuse课程中实施productsCollectionViewCell(BTW应该有一个大写的P):

class ProductsCollectionViewCell: UICollectionViewCell {
    @IBOutlet weak var addItems: UIButton!

    func prepareForReuse() {
        super.prepareForReuse()
        addItems?.removeTarget(nil, action: nil, forControlEvents: .AllEvents)
    }
}