在 Swift 的 UIcollectionView 中获取下一个单元格

Posted

技术标签:

【中文标题】在 Swift 的 UIcollectionView 中获取下一个单元格【英文标题】:Get next cell in UIcollectionView in Swift 【发布时间】:2017-10-24 09:35:57 【问题描述】:

我需要在集合视图中的 cellForItem 中获取下一个单元格,以便我可以更新视图对象。当我尝试以下操作时,它不起作用。我也试过indexPathForVisibleItems 传入indexPath.row + 1 并产生索引超出范围错误。

    let index = IndexPath(row: indexPath.row + 1, section: indexPath.section)
            if let nextCell = collectionView.cellForItem(at: index) as! MKRCell 
                nextCell.setupWaitView(time: timeToWait)
                nextCell.waitViewHeightConstraint.constant = 80
                nextCell.waitView.alpha = 1
                nextCell.waitView.isHidden = false
            

这是否可能实现,或者我需要通过其他方式实现吗?

谢谢

【问题讨论】:

更改数据并使用该数据创建单元格要好得多。 在调用 cellForItem 的那一刻,下一个单元格不可用。那你为什么要这么做?你能解释更多细节吗? 如果当前单元格具有特定值(timeToWait),则尝试在下一个单元格上调用方法。 我认为您应该在没有单元格的情况下保存 timeToWait 值。然后在cellForItem 中设置它的值。 【参考方案1】:

不,cellForItemAt中初始化之前无法获取单元格对象,但是这里 您可以在显示来自UICollectionViewDelegate 的单元格之前接听电话

func collectionView(_ collectionView: UICollectionView,willDisplay cell: UICollectionViewCell,forItemAt indexPath: IndexPath) 
     if let myCell = cell as? MKRCell 

     

如果你想设置单元格,你必须在UICollectionViewDataSource中设置视图

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 


【讨论】:

正在尝试 willDisplay,无法将 nextCell 转换为!不过 MKRCell! 这已经 nextCell 不应用任何计算,仅类型将其转换为您的调用类 我需要以 MKRCell 的身份访问 nextcell,以便可以从其中调用方法。【参考方案2】:

你应该更新单元格:

func collectionView(_ collectionView: UICollectionView, 
    cellForItemAt indexPath: IndexPath) -> UICollectionViewCell

请记住只修改您将从该方法返回的单元格。那时其他单元格可能不存在。

或者,您可以保留对单元格的弱引用并在需要时对其进行更新。

【讨论】:

我确实在 cellForItem 中尝试了上述方法,但没有成功,包括在特定索引 + 1 处重新加载项目

以上是关于在 Swift 的 UIcollectionView 中获取下一个单元格的主要内容,如果未能解决你的问题,请参考以下文章

Swift5 踩过的坑和奇怪的API笔记

Swift5 踩过的坑和奇怪的API笔记

UICollectionViewLayout

如何在 UICollectionView 中实现页面之间的间距?

如何在 UICollectionView 中向下移动某些单元格

UICollectionView 点击选择多个单元格