didSelectItemAtIndexPath不会在自定义collectionViewCell中有标签时调用

我有一个自定义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()

}

回答:

也许你有问题别处。你可以仔细检查集合视图委托是否真正通过在控制台上记录设置?

另外:

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

应该在一些设置方法一次设定。

由于集合视图(如表视图)使用可重复的细胞这一行:

cell.sizeLabel.addGestureRecognizer(tap) 

可以将多个手势识别器添加到一个标签。在这种情况下,我更喜欢单元格触发的回调块。

以上是 didSelectItemAtIndexPath不会在自定义collectionViewCell中有标签时调用 的全部内容, 来源链接: utcz.com/qa/261177.html

回到顶部