2016-09-19 9 views
0

UICollectionViewに12個のセルが作成されました。私はタップで(同じ色に)色を変えたいと思っています。ここで複数のUICollectionViewCellカラーが一緒に変更される問題

は私のコードです:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    let cell = collectionView.cellForItemAtIndexPath(indexPath)as! InterestCollectionViewCell 
    print("2 \(cell.interest) \(indexPath.row)") 

    if cell.selected == true { 
     cell.backgroundColor = UIColor.redColor() 
    } 
    else { 
     cell.backgroundColor = UIColor.clearColor() 
    } 
} 

問題

  1. もう一度タップすると、私は[0]セルをタップすると色が、戻って変更されません[5 ]および[10]細胞も同様に色が変化する。私は[1]のセルをタップした後に同じ、[6]と[11]細胞は、あまりにも呼ばれます... etc.m

答えて

1

代わりdidSelectItemAtIndexPathに色を設定する次のようにする必要があり、そのためにcellForItemAtIndexPathに色を設定Intのインスタンスを宣言し、collectionViewの行をこのようなインスタンス内に格納します。

var selectedRow: Int = -1 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath:NSIndexPath)->UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CELL", forIndexPath: indexPath) as! InterestCollectionViewCell 
    // Set others detail of cell 
    if self.selectedRow == indexPath.item { 
     cell.backgroundColor = UIColor.redColor() 
    } 
    else { 
     cell.backgroundColor = UIColor.clearColor() 
    } 
    return cell 
} 

は今didSelectItemAtIndexPathselectedRowcollectionViewをリロード設定しました。

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    if self.selectedRow == indexPath.item { 
     self.selectedRow = -1 
    } 
    else { 
     self.selectedRow = indexPath.item 
    } 
    self.collectionView.reloadData() 
} 

編集:複数のセルを選択するためindexPathのアレイを作成し、このようなindexPathのオブジェクトを格納します。

var selectedIndexPaths = [NSIndexPath]() 

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath:NSIndexPath)->UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CELL", forIndexPath: indexPath) as! InterestCollectionViewCell 
    // Set others detail of cell 
    if self.selectedIndexPaths.contains(indexPath) { 
     cell.backgroundColor = UIColor.redColor() 
    } 
    else { 
     cell.backgroundColor = UIColor.clearColor() 
    } 
    return cell 
} 

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    if self.selectedIndexPaths.contains(indexPath) { 
     let index = self.selectedIndexPaths.indexOf(indexPath) 
     self.selectedIndexPaths.removeAtIndex(index) 
    } 
    else { 
     self.selectedIndexPaths.append(indexPath) 
    } 
    self.collectionView.reloadData() 
} 
+0

こんにちはNirav、あなたの答えに感謝します。複数のセルが呼び出され、色が元に戻ってしまう問題を修正しました。しかし、ユーザーが複数のアイテムをタップできるように、複数の選択を可能にするアプローチを知っていますか? – WoShiNiBaBa

+0

@WoShiNiBaBa編集済みの回答を複数選択してチェックしてください:) –

関連する問題