【问题标题】:DidSelectItemAtIndexPath not working with collectionviewDidSelectItemAtIndexPath 不适用于collectionview
【发布时间】:2024-01-18 22:59:01
【问题描述】:

所以我已经为此苦苦挣扎了一段时间。我有一个 UICollectionView 用作菜单。单元格是切换到另一个页面的选项。菜单完全按照它应该的方式运行,除了当你按下一个单元格时,比如单元格 0,它应该弹出到下一个视图。我发现该单元格正在注册触摸,但是当我尝试确定按下哪个单元格时,它会分崩离析。我已经尝试调试它,对我来说它看起来 indexPath 没有价值!我正在使用 didSelectItemAtIndexPath 函数,不,它不是 didDeselect (我已经从我的搜索中检查了如何解决这个问题)。我将发布代码,但这个代码真的难倒我。任何帮助将不胜感激!

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
{
    NSLog("Pressed Cell")

    if(indexPath == 0)
    {
        self.navigationController?.popToViewController(profileViewController, animated: true)
    }

}

【问题讨论】:

    标签: ios swift uicollectionview uicollectionviewcell


    【解决方案1】:

    NSIndexPath 包含一个部分和一个项目,您可以通过indexPath.itemindexPath.section 访问它们。假设您只有一个部分(因此其值无关紧要),您可以将代码更改为:

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
    {
        NSLog("Pressed Cell")
    
        if(indexPath.item == 0)
        {
            self.navigationController?.popToViewController(profileViewController, animated: true)
        }
    
    }
    

    【讨论】:

    • 感谢调试期间它进入 if 语句的那段时间。现在我只需要弹出另一个视图。目前,当您按下单元格时它仍然什么都不做,但这可能与这个问题无关。
    【解决方案2】:

    我确定通常会调用委托方法,但如果已将任何手势添加到视图中。确保在将手势识别器添加到视图之前,确保布尔属性“cancelTouchesInView”设置为 false。这可能是因为手势已被识别,因此它忽略了传递到视图的触摸,导致单元格选择方法不被调用。链接到财产。

    【讨论】:

    • 这是一个旧线程,但很抱歉接受的答案是正确的。没想到indexPath有section和item的访问方法,比如indexPath.row和indexPath.section。