如何查找选定集合视图单元格的索引路径?

Posted

技术标签:

【中文标题】如何查找选定集合视图单元格的索引路径?【英文标题】:How to find index Path for a selected Collection View Cell? 【发布时间】:2018-02-02 05:56:41 【问题描述】:

如何在不使用 didSelectItemAtIndexPath 和 prepareForSegue 的情况下找到选定集合视图单元格的索引路径?

我在 AlertViewController 中使用这个 indexPath。我不知道如何在 AlertView 控制器中获取这个 indexPath。

//Edit Selected Category
        let alertController = UIAlertController(title: "Alert", message: "Rename your ", preferredStyle: .alert)
        let actionOK = UIAlertAction(title: "OK", style: .default)

        alertController.addTextField(configurationHandler: (textField: UITextField) -> Void in

            if let iP: IndexPath = self.collCategory.indexPath(for: CategoryCollectionCell) 

                print("IP \(iP)")
            

        )

        alertController.addAction(actionOK)
        self.present(alertController, animated: true, completion: nil)

【问题讨论】:

collectionView.indexPathsForSelectedItems 如何在没有用户交互的情况下呈现这个UIAlertController?如果您有一些代码,请提供。 【参考方案1】:

使用这个:

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
        collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .bottom)

然后你会从 collectionView.indexPathsForSelectedItems 获取路径

if let collectionView = self.YourCollectionView,
    let indexPath = collectionView.indexPathsForSelectedItems?.first,
    let cell = collectionView.cellForItem(at: indexPath) as? YourCell 

【讨论】:

我正在使用你的代码,但我在打印时没有得到索引路径。 @RahulChopra 抱歉错过了一件事。您必须在 didSelect 委托方法中设置选择。有更新答案【参考方案2】:

Swift 4-4.2 - 返回单元格的索引。

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    let cellIndex = indexPath[1] // try without [1] returns a list.
    print(indexPath[1])
    chapterIndexDelegate.didTapChapterSelection(chapterIndex: test)

【讨论】:

【参考方案3】:

这是我的解决方案

private func getCurrentIndex() -> Int 
    return Int(collectionView.contentOffset.x / collectionView.frame.width)

【讨论】:

【参考方案4】:

要选择没有 didSelect 方法的单元格,您可以使用 Tap Gesture 来检测单元格。 检查以下方法以向单元格添加手势并检测手势。

//在collectionview单元格返回方法中添加以下代码

if let gestures = cell. contentView.gestureRecognizers 
            gestures.forEach( (tap) in
                if tap .isKind(of: UITapGestureRecognizer.self) == true 
                    cell.contentView.removeGestureRecognizer(tap)
                
            )
        
let tapRec = UITapGestureRecognizer.init(target: self, action: #selector(didTap(sender:)))
cell.contentView.isUserInteractionEnabled = true
cell.contentView.addGestureRecognizer(tapRec)

//创建检测手势识别器的方法

func didTap(sender: UIGestureRecognizer)

    let cell = sender.view?.superview as! yourCell

希望它会起作用。

【讨论】:

【参考方案5】:

在您的 CollectionView 委托调用中

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) 
    print(" Row : \(indexPath.row)")

    return cell

【讨论】:

当我选择单元格时我想要这个 indexPath。 是的,当你点击单元格时,它会给你一个特定的单元格,不,你点击@RahulChopra @AvinashMishra 请解释这个答案如何解决所提出的问题(因为它没有)。 @rmaddy 这将为您提供一个确切的索引路径编号,您将在其中点击 collectionView 单元格,这就是要问的问题。根据我的说法,如果还有其他事情请告诉我。 问题是问如何获取选中单元格的索引路径。您发布的代码与选定的单元格无关。您将用于为所有项目提供单元格的代码发布到集合视图。

以上是关于如何查找选定集合视图单元格的索引路径?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2.1 - 如何将集合视图单元格的索引行传递给另一个视图控制器

滚动到一个集合视图到一个物种索引

UICollectionView接收具有不存在的索引路径的单元格的布局属性

UICollectionView 接收到具有不存在索引路径的单元格的布局属性

如何在基于部分的表格视图中获取开关更改事件中单元格的索引路径

关闭视图后如何保持集合视图单元格的状态?