2016-05-08 52 views
1

我一直在與collectionViewsTableViews一起工作,瞭解它們如何工作,但這有點令人困惑。我有一個集合視圖,連同代表和自己設置的數據源一起連接到ViewController。但是在嘗試使用didSelectItemAtIndexPath時,沒有任何反應。該集合也完美顯示,所以數據源功能運行良好。未能選擇集合視圖中的項目,Swift

這是我的代碼:

@IBOutlet weak var timeCollectionView: UICollectionView! 

override func viewDidLoad() { 
     super.viewDidLoad() 

     //Register the Cell 
     let nib = UINib(nibName: "DurationSelectionCollectionViewCell", bundle:nil) 
     self.timeCollectionView.registerNib(nib, forCellWithReuseIdentifier: "DurationSelectionCollectionViewCell") 

     timeCollectionView.delegate = self 
     timeCollectionView.dataSource = self 

     .... 

} 

//Selecting an item and highlighting it. 
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 

     timeCollectionView.cellForItemAtIndexPath(indexPath)?.backgroundColor = UIColor.grayColor() 

} 

回答

0

如果你想改變在集合視圖中選擇項目的背景顏色,你應該繼承您的UICollectionViewCell,並覆蓋highlighted財產。

class DurationSelectionCollectionViewCell: UICollectionViewCell { 
    override var highlighted: Bool { 
     didSet { 
      contentView.backgroundColor = highlighted ? .grayColor() : nil 
     } 
    } 
} 
+0

我只是試過,沒有發生任何事情!我在didSelectItemAtIndexPathItem中有一個斷點,並且點擊任何單元格時,我都沒有得到任何反饋來指示該函數接收到該調用。 – Gugulethu

1

我測試了這個,只要你的collectionview委託和數據源連接,它就會工作。你的問題是你調用了timeCollectionView,你想調用在didSelectItemAtIndexPath聲明中給你的通用collectionView變量。我強調了它在下面以粗體顯示:

FUNC的CollectionView(的CollectionView:UICollectionView,didSelectItemAtIndexPath indexPath:NSIndexPath)

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

    let cell = collectionView.cellForItemAtIndexPath(indexPath) as! MyCustomCollectionViewCell 
    cell.backgroundColor = UIColor.grayColor() 

} 
+0

要麼我沒有看到它或什麼,但我不認爲這是可用的集合意見。 – Gugulethu

+0

我的歉意,我要添加另一個答案,我可能有一個想法什麼是錯的 – user3353890

+0

@Gugulethu檢查我提供的更新的解決方案。我在Xcode中測試過它,所以它應該適合你。 – user3353890

0

如果didSelectItemAtIndexPathItem:不被調用,確保你已經delegatedataSource正確設置爲你的視圖控制器。