UICollection视图

时间:2016-03-16 07:17:36

标签: ios arrays swift

我有一个可重复使用的集合视图单元格。我试图在索引路径的didselect设置一个图像但是当我选择一个单元格时,它返回的单元格返回相同的图像。

这是代码。

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


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell

    cell.userImage.layer.cornerRadius = cell.userImage.frame.size.width/2
    cell.userImage.clipsToBounds = true

    return cell
  }




func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int{
  return 10
  }

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath){

    let cell = collectionView.cellForItemAtIndexPath(indexPath) as! CollectionViewCell
    cell.userStatusImage.image = UIImage(named: "selectedcontact.png")

    collectionView.reloadData()

  }

2 个答案:

答案 0 :(得分:0)

似乎最后一行代码collectionView.reloadData()会将所有单元格重新加载到初始状态,因为您没有任何地方检查是否选择了一个特定单元格。

答案 1 :(得分:0)

您需要跟踪所选的单元格。

    var selectedIndexes = [Int]()
    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
            return 1
        }


   override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return 100
        }

   override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath)
            if self.selectedIndexes.contains(indexPath.row){
                cell.backgroundColor = UIColor.redColor()
            }
            else{
               cell.backgroundColor = UIColor.whiteColor()
            }

            return cell
        }

   // MARK: UICollectionViewDelegate
   override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

            if selectedIndexes.contains(indexPath.row){
                selectedIndexes.removeObject(indexPath.row)
            }
            else{
                selectedIndexes.append(indexPath.row)
            }
            collectionView.reloadData()
        }

Swift数组没有删除对象的方法。这是

的扩展
extension Array {
    mutating func removeObject<U: Equatable>(object: U) -> Bool {
        for (idx, objectToCompare) in self.enumerate() {
            if let to = objectToCompare as? U {
                if object == to {
                    self.removeAtIndex(idx)
                    return true
                }
            }
        }
        return false
    }
}