ios – Selector获取indexPath UICollectionView Swift 3.0

我试图在单击两次时获取单元格的indexPath.
我在Selector中传递参数,但是它给出了错误.
这是什么格式?
func collectionView(_ collectionView: UICollectionView,cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if  let subOptioncell : SubOptionsCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: subOptionsCVReuseIdentifier,for: indexPath) as! SubOptionsCollectionViewCell

          let imageNamed = "(customizeOptionSelected[indexPath.row])"
          subOptioncell.subOptionsImage.image = UIImage(named: imageNamed)

          let tap =  UITapGestureRecognizer(target: self,action: #selector(doubleTapped(sender: indexPath)))
          tap.numberOfTapsRequired = 2
          collectionView.addGestureRecognizer(tap)   

          return subOptioncell
    }
}

func doubleTapped(sender: IndexPath) {
    print("Double Tap")
}

解决方法

首先,您将tapGesture添加到collectionView而不是subOptioncell.

它应该是:

subOptioncell.addGestureRecognizer(tap)

代替:

collectionView.addGestureRecognizer(tap)

您无法使用UIGestureRecognizer的选择器传递其他实例,您可以传递的唯一实例是UI(Tap)GestureRecognizer.如果你想要那个单元格的indexPath,你可以尝试这样.首先将TapGesture的选择器设置为这样.

let tap =  UITapGestureRecognizer(target: self,action: #selector(doubleTapped(sender:)))

现在的方法应该是:

func doubleTapped(sender: UITapGestureRecognizer) {
    if let cell = sender.view as? SubOptionsCollectionViewCell,let indexPath = self.collectionView.indexPath(for: cell) {
         print(indexPath)
    }       
}

编辑:如果要在单元格双击上显示/隐藏图像,则需要使用单元格的indexPath处理它,因为它首先声明一个IndexPath实例并在cellForItemAt indexPath中使用它.

var selectedIndexPaths = IndexPath()

func collectionView(_ collectionView: UICollectionView,cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    //Your code 
    //Now add below code to handle show/hide image
    cell.subOptionSelected.isHidden = self.selectedIndexPaths != indexPath
    return cell
}

现在,在UITapGestureRecognizer的doubleTapped操作中设置selectedIndexPath.

func doubleTapped(sender: UITapGestureRecognizer) {
    if let cell = sender.view as? SubOptionsCollectionViewCell,let indexPath = self.collectionView.indexPath(for: cell) {
         if self.selectedIndexPaths == indexPath {
             cell.subOptionSelected.isHidden = true
             self.selectedIndexPaths = IndexPath()
         }
         else {
             cell.subOptionSelected.isHidden = false
             self.selectedIndexPaths = indexPath
         }           
    }       
}

以上是来客网为你收集整理的ios – Selector获取indexPath UICollectionView Swift 3.0全部内容,希望文章能够帮你解决ios – Selector获取indexPath UICollectionView Swift 3.0所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。