当自定义 collectionViewCell 中包含标签时,不会调用 didSelectItemAtIndexPath

Posted

技术标签:

【中文标题】当自定义 collectionViewCell 中包含标签时,不会调用 didSelectItemAtIndexPath【英文标题】:didSelectItemAtIndexPath does not get called when a custom collectionViewCell has label in it 【发布时间】:2016-08-10 06:24:22 【问题描述】:

我有一个自定义的 collectionViewCell,其标签覆盖了整个 collectionViewCell 的大小。一切似乎都按计划进行,但唯一似乎不起作用的是collectionViewCell 没有调用didSelectItemAtIndexPath。我做错了什么?为什么 UILabel 不将事件传递给超级视图。在 UILabel 上启用了用户交互。

编辑:将点击手势添加到标签

  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()

【问题讨论】:

然后添加标签的手势并获取手势操作 是的,我已经这样做了,但是在选择一个单元格时,选择器似乎被多次触发。 你能显示一些代码吗 @Anbu.Karthik 看看 请输入您的代码... 【参考方案1】:

可能你在其他地方有问题。您可以通过在控制台上登录来仔细检查集合视图委托是否真的设置了?

还有:

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

应该在某些设置方法中设置一次。

因为集合视图(作为表格视图)在这一行使用可重复使用的单元格:

cell.sizeLabel.addGestureRecognizer(tap)

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

【讨论】:

以上是关于当自定义 collectionViewCell 中包含标签时,不会调用 didSelectItemAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章

无服务器错误,当自定义命名资源需要替换时,CloudFormation 无法更新堆栈

Flex:当自定义 itemrenderers 中的文本更改时,强制重绘 DataGrid

当自定义模板已应用于节点的内容类型时,如何在 Drupal 6 中自定义特定节点?

从可重用单元中出列时,自定义 CollectionViewCell 上会触发啥方法?

CollectionViewCell、MapView 和自定义注解

自定义 CollectionViewCell 处理按钮按下