我创建了一个水平的UICollectionView来显示12个月,我需要用户选择其中的一个,以实现使用collectionCell.isUserInteractionEnabled=trueUITapGestureRecognizer的功能,但这会返回整个页面的月份。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let collectionCell = collectionView.dequeueReusableCell(withReuseIdentifier: "monthCollectionView", for: indexPath as IndexPath) as! AttendenceCollectionViewCell
    collectionCell.collectionViewCellLabel.text=monthArray[indexPath.item]
    collectionCell.backgroundColor = UIColor.clear
    collectionCell.isUserInteractionEnabled=true
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(customMonth(month:tap:)))
    collectionCell.collectionViewCellLabel.addGestureRecognizer(tapGesture)
    collectionCell.collectionViewCellLabel.isEnabled=true
    collectionCell.isExclusiveTouch=true

    customMonth(month:monthArray[indexPath.item],tap: tapGesture)


    return collectionCell
}


@objc func customMonth(month:String,tap:UITapGestureRecognizer){
    print("\n",month,"\n")


输出:


  八月
  
  九月
  
  十月
  
  十一月
  
  十二月
  
  四月
  
  三月
  
  二月
  
  一月

最佳答案

您实际上应该使用collectionView的委托方法didSelectItemAt()而不是使用手势识别器。

10-06 00:05