2016-05-14 144 views
0

因此,首先我已經停留了幾天,花了整整一天的時間閱讀並嘗試了很多堆棧溢出的選項,但對我的成功沒有幫助切換UICollectionView單元格的選擇/取消選擇狀態 - Swift

什麼,我試圖完成聽起來很簡單,並打算在我看來,蘋果的文檔超過它應該工作 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UICollectionViewDelegate_protocol/#//apple_ref/occ/intfm/UICollectionViewDelegate/collectionView:shouldHighlightItemAtIndexPath

基本上我想要實現切換一個UICollectionView的選中狀態自來水單元。

第一次點擊 - 將單元格發送到選定狀態並將背景顏色更改爲白色。

第二抽頭 - 小區發送到取消選擇狀態和變化的背景色清除

的ViewController -

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as? CollectionViewCell { 
     cell.cellImage.image = UIImage(named: images[indexPath.row]) 
     return cell 
    } else { 
     return CollectionViewCell() 
    } 
} 

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    if let cell = collectionView.cellForItemAtIndexPath(indexPath) as? CollectionViewCell { 
     cell.toggleSelectedState() 
    } 
} 

func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) { 
    if let cell = collectionView.cellForItemAtIndexPath(indexPath) as? CollectionViewCell { 
     cell.toggleSelectedState() 
    } 
} 

細胞 -

func toggleSelectedState() { 
    if selected { 
     print("Selected") 
     backgroundColor = UIColor.whiteColor() 
    } else { 
     backgroundColor = UIColor.clearColor() 
     print("Deselected") 
    } 
} 

時遇到的問題是didDeselectItemAtIndexPath不會在點擊已經選擇的單元格時被調用,儘管如果我點擊另一個單元格,它會被調用並選擇新單元格...

我曾嘗試在shouldSelectItemAtIndexPath檢查選擇的狀態& shouldDeselectItemAtIndexPath,我甚至試着寫一個tapGesture來解決這個問題,仍然沒有運氣...

有我丟失的東西? 或者是否有任何已知的解決方法呢? 任何幫助將不勝感激!

+1

當點擊同一個單元格時,它必須再次調用'didSelectItemAtIndexPath'。請檢查 – Shubhank

回答

0

也許你可以創建一個與單元格具有相同邊界的UIButton(),並確定按鈕中的選擇。然後在按鈕的輕擊操作中,您可以執行某些操作以「分離」選中的單元格。

+0

啊當然!甚至沒有想到... 沒有完全按照我希望的方式工作,但我用通知讓它工作 謝謝! – Brrrrryce

0

您可以將UICollectionView的allowsMultipleSelection屬性設置爲YES(true),那麼集合視圖將不會取消選擇以前的項目。

相關問題