Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Implement didSelect in a collection view inside a cell

I am trying to perform a segue from a collection view which is inside a table view cell, the view looks like this

enter image description here

To explain it well, I have a table view, each row has a cell , inside the second row , I have a collection view which includes several products

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    switch indexPath.row {
    case 0:
        let cell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell", for: indexPath)
        return cell
    case 1:
        let cell = tableView.dequeueReusableCell(withIdentifier: "ItemTitle", for: indexPath)
        return cell
    case 2:
        let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath)
        return cell
    case 3:
        let cell = tableView.dequeueReusableCell(withIdentifier: "SectionTitle", for: indexPath)
        return cell
    case 4:
        let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
        return cell
    default:
        let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
        return cell
    }
}

Inside my ItemCell class I have the following

@IBOutlet weak var collectionView: UICollectionView!
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "singleItemCell", for: indexPath) as! singleItemCell

    cell.itemImage.image = images[indexPath.row]
    cell.itemImage.contentMode = .scaleAspectFit


    return cell
}

I want to perform a segue such as when the user select a cell from the collection view, It takes him to another view controller. How can I do that ?

I tried performSegue but it does not allow me since I am in the cell class

Please any tips ?

like image 200
fatimah shams Avatar asked Oct 28 '25 16:10

fatimah shams


1 Answers

In Your ItemCell class make a variable for referencing your ViewController like this:

var productVC:UIVIewController?

while loading TableView Cell set the reference to self like this:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    switch indexPath.row {
    case 2:
        let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath)
        cell.productVC = self
        return cell
    default:
        let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
        return cell
    }
}

then implement the didSelect UICollectionView delegate method in ItemCell Class

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
   productVC.performSegue(withIdentifier: "pass your segue identifier here..", sender: nil)
}
like image 160
Irshad Ahmad Avatar answered Oct 31 '25 05:10

Irshad Ahmad



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!