How to use collection view in IOS

Posted By : Amit Kumar Mishra | 17-Dec-2018

Introduction

 

According to apple document, Collection View is defined as:-

A collection view is a way to present an ordered set of data items using a flexible and changeable layout. The most common use for collection views is to present items in a grid-like arrangement, but collection views in iOS are capable of more than just rows and columns. With collection views, the precise layout of visual elements is definable through subclassing and can be changed dynamically, so you can implement grids, stacks, circular layouts, dynamically changing layouts or any type of arrangement you can imagine.

 

Prerequisites

1. Hardware

->IPhone 5s and above.

2. Software

-> iOS 8 and above

 

Steps to set up container View:-

This project has been tested with Xcode 10 and Swift 4.2.

1. Create a new project

It can be just a Single View App.

2. Add the code

Create a new Cocoa Touch Class file (File > New > File... > iOS > Cocoa Touch Class). Name it MyCollectionViewCell. This class will hold the outlets for the views that you add to your cell in the storyboard.

import UIKit

class MyCollectionViewCell: UICollectionViewCell {

@IBOutlet weak var myLabel: UILabel!

}

We will connect this outlet later.

Open ViewController.swift and make sure you have the following content:

import UIKit

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {

let reuseIdentifier = "cell" // also enter this string as the cell identifier in the storyboard

var items = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48"]

// MARK: - UICollectionViewDataSource protocol

// tell the collection view how many cells to make

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return self.items.count }

// make a cell for each cell index path

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

// get a reference to our storyboard cell

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! MyCollectionViewCell

// Use the outlet in our custom class to get a reference to the UILabel in the cell

cell.myLabel.text = self.items[indexPath.item]

cell.backgroundColor = UIColor.cyan

// make cell more visible in our example project

return cell

}

// MARK: - UICollectionViewDelegate protocol

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

// handle tap events

print("You selected cell #\(indexPath.item)!")

}

}

Notes

  • UICollectionViewDataSource and UICollectionViewDelegate are the protocols that the collection view follows. You could also add the UICollectionViewFlowLayout protocol to change the size of the views programmatically, but it isn't necessary.
  • We are just putting simple strings in our grid, but you could certainly do images later.

3. Setup the storyboard

Drag a Collection View to the View Controller in your storyboard. You can add constraints to make it fill the parent view if you like.

Make sure that your defaults in the Attribute Inspector are also

  • Items: 1
  • Layout: Flow

The little box in the top left of the Collection View is a Collection View Cell. We will use it as our prototype cell. Drag a Label into the cell and center it. You can resize the cell borders and add constraints to center the Label if you like.

 

Write "cell" (without quotes) in the Identifier box of the Attributes Inspector for the Collection View Cell. Note that this is the same value as let reuseIdentifier = "cell" in ViewController.swift.

 

And in the Identity Inspector for the cell, set the class name to MyCollectionViewCell, our custom class that we made.

 4. Hook up the outlets

  • Hook the Label in the collection cell to myLabel in the MyCollectionViewCell class. (You can Control-drag.)
  • Hook the Collection View delegate and dataSource to the View Controller. (Right-click Collection View in the Document Outline. Then click and drag the plus arrow up to the View Controller.)

 

Finished

Here is what it looks like after adding constraints to center the Label in the cell and pinning the Collection View to the walls of the parent.

About Author

Author Image
Amit Kumar Mishra

Amit Kumar Mishra is working as an iOS Application developer and he is very dedicated towards his work.

Request for Proposal

Name is required

Comment is required

Sending message..