Swift - CollectionView,如何查找 IndexPath 中的第一个和最后一个项目?

标签 swift nsindexpath collectionview

我为我的 Collection View 单元编写了一个赞成/反对函数。

我将单元格的得分变量与其上方和下方的单元格进行比较。 收到赞成票输入后,我有一个包含以下代码的函数。

    if cell != CVcellArray.first && cell != CVcellArray.last {
        print("NOW CHECKING IP")
        let ip_greater = NSIndexPath(forItem: ip!.item - 1, inSection: ip!.section)
        let ip_less = NSIndexPath(forItem: ip!.item + 1, inSection: ip!.section)
        let cell_greater = self.collectionView?.cellForItemAtIndexPath(ip_greater) as! CollectionViewCell
        let cell_less = self.collectionView?.cellForItemAtIndexPath(ip_less) as! CollectionViewCell
        // recursive call to allow the cell to jump over repeat scores
        if cell.score > cell_greater.score {
            checkIPGreater(ip!, origIp: ip!)
        }
        else if cell.score < cell_less.score {
            checkIPLesser(ip!, origIp: ip!)
        }
        else {
            //do nothing
        }
    }
    else {
        print("No need to check ip")
    }

checkIPLesser/Greater 是查看重复分数的函数,以便单元格在投票时可能会跳过多个空格。

当我对顶部/底部的单元格投赞成票/反对票时,我崩溃了。这是我的假设,因为 swift 试图找到一个大于最大单元格或小于最低单元格的单元格,但它失败了。因此,我编写了一行来检查被投票的单元格是否位于单元格数组的第一个或单元格数组的末尾。

尽管如此,它仍然失败。我觉得我没有正确找到顶部或底部的单元格。

我有一个部分,该部分内有多个项目(这些项目是单元格)。有什么方法可以访问顶部或底部的项目吗?

最佳答案

我不知道崩溃的原因,但由于您强制解包 ip 并且没有向我们展示 ip 来自哪里,我我对此表示怀疑。如果您需要帮助确定具体原因,如果您发布更多代码和崩溃的堆栈跟踪,将会有所帮助。

尽管如此,我认为您的处理方式是错误的。您应该处理底层数据,而不是处理单元格和索引路径。您的 Collection View 有一个数据源对象,负责填充单元格,并且该数据源可能与某种数据模型交互。赞成票和反对票的数量是数据模型中项目的属性,任何更改都应由模型处理。

如果您以这种方式实现,那么您的 Collection View Controller 所需要做的就是识别已发生赞成或反对投票,并将该信息传递给模型。然后,模型可以更新数据并重新排列项目,这就像对数组进行排序一样简单。然后,模型将通知所有监听器项目已更改,并且 Collection View Controller 将重新加载单元格。

关于Swift - CollectionView,如何查找 IndexPath 中的第一个和最后一个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34893066/

相关文章:

swift 4,如何在collectionView中加载超过3000~张图片?

ios - 将静态单元格添加到 UICollectionView

swift - 如何检测移动 ImageView 是否接触到另一个 ImageView

swift - 在 SwiftUI 文本中显示已发布的整数

ios - 无限 collectionview 单元格没有唯一的索引路径

iOS - TableView - 在点击按钮时获取标题部分的索引

ios - 表格 View 中的缓慢/断断续续的滚动

ios - 以编程方式创建的 View Controller 在显示或推送时有黑色空间

Swift indexPath 数组计算

android - 嵌套的 CollectionViews 和显示(使用 Visual Studio 2019、Xamarin XPlatform Android)