2016-11-19 67 views
0

我有一個UICollectionView和一個自定義單元格。定製單元包含一個UIImageView和一個UILabel點擊集合視圖項會導致集合視圖中的多個選擇,而不是單個選擇

  1. 我想改變UIImageView的背景顏色,當我輕按對應的小區(在didSelectItemAt indexPath方法我想訪問自定義電池特性)。有什麼辦法可以做到這一點?或者我需要一些替代方法?
  2. 我得到的另一個問題是,當我點擊UICollectionView中的任何項目時,發生多項選擇。意味着可重複使用的細胞也被選中。

有人能幫助我嗎?

+0

你在swift中工作嗎? –

+0

是的,我正在迅速工作。 –

回答

0

試試這個:

1.定製UICollectionViewCell類:

import UIKit 

class CustomCollectionViewCell: UICollectionViewCell 
{ 
    //MARK: Outlets 
    @IBOutlet weak var testImageView: UIImageView! 
    @IBOutlet weak var testLabel: UILabel! 

    //MARK: Lifecycle Methods 
    override func awakeFromNib() 
    { 
     self.testImageView.image = nil 
     self.testLabel.text = nil 
    } 

    override var isSelected: Bool{ 
     willSet{ 
      super.isSelected = newValue 
      if newValue 
      { 
       self.backgroundColor = UIColor.lightGray 
      } 
      else 
      { 
       self.backgroundColor = UIColor.groupTableViewBackground 
      } 
     } 
    } 
} 

2.實施UICollectionViewDelegate方法爲:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
{ 
    collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .centeredVertically) 
} 

您可以更改Ť他可根據您的要求選擇單元格和默認顏色。

0

對於你的第一個問題

參考this鏈接,它包含了如何訪問細胞及其屬性的解釋。 (這是爲UITableView,但同樣的事情可以爲UICollectionView完成)

對於你的第二個問題

你將不得不在didSelectRow升級模型,然後在cellForRowAtIndexPath你將不得不設置的顏色基於該模型的單元格。

關於第二個點的另一種解決辦法是將所選擇的indexPath存儲在一個陣列 並在cellForRowAtIndexPath檢查如果indexPath 存在該數組中並適當地設定它的顏色。例如:

var array = [Int]() 
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     //update model or 
     array.append(indexPath.item) 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    //check model or 
    if(array.contains(indexPath.item)){ 


    }else{ 

    } 
} 
相關問題