Justin Frazer
Justin Frazer

Reputation: 970

Passing Data from a ViewController to a Collection Cell within a Table Cell

This may be a little confusing, but i have a view controller that has a table view that contains a custom table cell and within this table cell, I have a collectionView with each cell holding a single image. I am trying to configure my collectionCell's image using the userToView variable seen below.

The delegate function below is where the table cell is being configured:

OtherUserAccountViewController.swift

class OtherUserAccountViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var userToView = User() 

...

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell:OtherUserPhotosTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: photosCellReuseIdentifier) as! OtherUserPhotosTableViewCell
        cell.selectionStyle = .none

        return cell
    }
...

}

The delegate function below is where this image is being set:

OtherUserPhotosTableViewCell.swift

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "otherUserPhotosCollectionCell", for: indexPath) as! OtherUserPhotosCollectionViewCell
    //Configure cell with photo from parent ViewController
    return cell
}

My custom CollectionViewCell can be seen below:

OtherUserPhotosCollectionViewCell.swift

class OtherUserPhotosCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var imageView: UIImageView!
}

I have only really been getting accustomed to Swift & iOS development over the last couple weeks so any help is much appreciated. Thank you for your time!

Upvotes: 2

Views: 1480

Answers (1)

KrishnaCA
KrishnaCA

Reputation: 5695

Answered by assuming that you have UIImages already available to you

Assuming you have a single UICollectionViewCell

In OtherUserPhotosTableViewCell.swift

var photoFromTableView: UIImage?    

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "otherUserPhotosCollectionCell", for: indexPath) as! OtherUserPhotosCollectionViewCell
    //Configure cell with photo from parent ViewController
    if let photo:UIImage = photoFromTableView {
        cell.imageView.image = photo
    }
    return cell
}

In OtherUserAccountViewController.swift

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell:OtherUserPhotosTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: photosCellReuseIdentifier) as! OtherUserPhotosTableViewCell
    cell.selectionStyle = .none
    cell.photoFromTableView = //Image you want to pass
    return cell
}

Assuming you have multiple UICollectionViewCells

In OtherUserPhotosTableViewCell.swift

var photosArray: [UIImage]?    

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "otherUserPhotosCollectionCell", for: indexPath) as! OtherUserPhotosCollectionViewCell
    //Configure cell with photo from parent ViewController
    if let photo_array:[UIImage] = photosArray {
        cell.imageView.image = photo_array[IndexPath.row]
    }
    return cell
}

In OtherUserAccountViewController.swift

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell:OtherUserPhotosTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: photosCellReuseIdentifier) as! OtherUserPhotosTableViewCell
    cell.selectionStyle = .none
    cell.photosArray = //Array of Images you want to pass
    return cell
}

Upvotes: 2

Related Questions