访问 collectionView 单元格可见/不可见

Posted

技术标签:

【中文标题】访问 collectionView 单元格可见/不可见【英文标题】:Accessing collectionView cells visible/invisible 【发布时间】:2018-11-06 06:53:54 【问题描述】:

我有一个功能可以翻转我的集合视图单元格,它工作正常。我的问题是我想翻转所有单元格而不仅仅是这个可见的单元格,所以当我滑动到下一个单元格时它会被翻转。

这就是我用来翻转一个可见单元格的方法。任何正确方向的帮助将不胜感激。

func flipAction() 
        let visibleRect = CGRect(origin: mainCollecView.contentOffset, size: mainCollecView.bounds.size)
        let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
        let visibleIndexPath = mainCollecView.indexPathForItem(at: visiblePoint)
        let cell = mainCollecView.cellForItem(at: visibleIndexPath!) as! MainCollectionViewCell

if cell.isFlipped == false 
       //Flip card
        cell.flip()
        cell.isFlipped = true
        flipBtn.setImage(UIImage(named: "reversed"), for: .normal)

     else 
        // Flip the card back
        flipBtn.setImage(UIImage(named: "Calendar"), for: .normal)
        cell.flipBack()
        cell.isFlipped = false
    
   

【问题讨论】:

用 var myarr = Array 为 isFlipped 值完成所有单元格的数组。那么如果 myarr[indexPath ... ] 单元格... @user3344236,感谢您的回复。我是 swift 新手,你能举个例子吗...谢谢 【参考方案1】:

您可以使用不同的方法。但是,如果您希望全部翻转,请在您的 Class 中使用一个变量,例如

      var isFlipped:Bool = false 

现在在你的函数中:

      flipAction() 
           isfliped =  !isfliped
           mycollection.reload() //where mycollection is yours 
      

然后在你的

     func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
     
       if isfliped == false 
             // your code for cell when is not flipped 
        else  
             //your code for cell when is flipped
        

这样,所有单元格将立即翻转或不翻转,而不取决于它们是否可见。

【讨论】:

感谢您的回复。您的解决方案不起作用,因为我在按钮内使用翻转方法而不是 collectionViewcellForItemAt。 无论你怎么称呼它,它都会设置一个声明为通用的值,并且你的集合视图会根据该值重新加载。

以上是关于访问 collectionView 单元格可见/不可见的主要内容,如果未能解决你的问题,请参考以下文章

获取不可见的 CollectionView 单元格

尝试在collectionview中为不可见单元格设置动画时如何防止延迟

无法从 UITest 中的 CollectionView 元素访问单元格

页面加载时滚动后如何访问 UICollectionView 中的特定单元格?

仅更改一个 collectionview 单元格的对象

单元格部分可见的 UICollectionView