Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Looping through CollectionView Cells in Swift

I'm wondering how to loop through all of my CollectionView Cells that currently visible.

In Objective C, I would achieve this concept seen below:

for(UICollectionView *cell in collectionView.visibleCells){

}

I've tried changing this into swift:

for cell:MyCollectionViewCell in self.collectionView.visibleCells() as cell:MyCollectionViewCell {

}

However I get the following error:

Type 'MyCollectionViewCell' does not conform to protocol 'SequenceType'

How do I loop through all my CollectionViewCells

like image 689
Ryan Avatar asked Aug 25 '14 16:08

Ryan


2 Answers

They way you're using as in that loop is trying to cast the array of visible cells to a single collection view cell. You want to cast to an array:

for cell in cv.visibleCells() as [UICollectionViewCell] {
    // do something        
}

or perhaps if you only have MyCollectionViewCell instances, this will work:

for cell in cv.visibleCells() as [MyCollectionViewCell] {
    // do something 
}
like image 118
Nate Cook Avatar answered Sep 28 '22 22:09

Nate Cook


In Swift 5:

There are five cells in section 0. Set each cells' backgroundcolor.

for row in 0..<collectionView.numberOfItems(inSection: 0){

            let indexPath = NSIndexPath(row:row, section:0)

            let cell:UICollectionViewCell = collectionView.cellForItem(at: indexPath as IndexPath) ?? cell

            switch row {
            case 0:
                cell.backgroundColor = .red
            case 1:
                cell.backgroundColor = .green
            case 2:
                cell.backgroundColor = .blue
            case 3:
                cell.backgroundColor = .yellow

            default:
                cell.backgroundColor = .white
            }
        }
like image 29
saneryee Avatar answered Sep 29 '22 00:09

saneryee