2016-08-10 89 views
1

我有一個自定義collectionViewCell,標籤覆蓋整個collectionViewCell大小。一切似乎按計劃進行,但唯一看起來不起作用的是collectionViewCell不調用didSelectItemAtIndexPath。我做錯了什麼?爲什麼不是UILabel將事件傳遞給超級視圖。用戶交互在UILabel上啓用。didSelectItemAtIndexPath不會在自定義collectionViewCell中有標籤時調用

編輯:添加TAP姿態LABEL

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    collectionView.registerNib(UINib(nibName: "ProductSizeCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "CollectionViewCell") 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CollectionViewCell", forIndexPath: indexPath) as! ProductSizeCollectionViewCell 
    let tap = UITapGestureRecognizer() 
    tap.addTarget(self, action: #selector(ProductDetailPageController.sizeTapped(_:))) 
    cell.sizeLabel.tag = indexPath.row 
    cell.sizeLabel.addGestureRecognizer(tap) 
    return cell 
} 


func sizeTapped(sender : UITapGestureRecognizer) { 
    let view = sender.view as? UILabel 
    print(view!.tag) 
    let indexPath = NSIndexPath(forItem: view!.tag, inSection: 0) 
    let cell = collectionViewSize.cellForItemAtIndexPath(indexPath) as! ProductSizeCollectionViewCell 
    if !cell.selectedCell { 
     cell.selectedCell = true 
     cell.layer.borderColor = UIColor(hexString: "9E9E9E").CGColor 
    } else { 
     cell.selectedCell = false 
     cell.layer.borderColor = UIColor(hexString: "E8E6E4").CGColor 
    } 
    collectionViewSize.reloadData() 
} 
+0

然後添加你的標籤的手勢,並獲得手勢動作 –

+0

是的,我已經這樣做了,但是在選擇一個單元格時,選擇器似乎被多次觸發。 – MrDank

+0

你可以顯示一些代碼 –

回答

0

也許你有問題別處。你可以仔細檢查集合視圖委託是否真正通過在控制檯上記錄設置?

另外:

collectionView.registerNib(UINib(nibName: "ProductSizeCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "CollectionViewCell") 

應該在一些設置方法一次設定。

由於集合視圖(如表視圖)使用可重複的細胞這一行:

cell.sizeLabel.addGestureRecognizer(tap) 

可以將多個手勢識別器添加到一個標籤。在這種情況下,我更喜歡單元格觸發的回調塊。

相關問題