Can somebody please see any errors here that are preventing the cell "photoInTheCellnow" to show UIImage values from image Picker
import UIKit
import Photos
import PhotosUI
class FirstViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
@IBOutlet weak var collectionView: UICollectionView!
var photosInTheCellNow = [UIImage]()
var imagePicker = UIImagePickerController()
override func viewDidLoad() {
super.viewDidLoad()
collectionView.delegate = self
collectionView.dataSource = self
imagePicker.delegate = self
}
@IBAction func openLibrary(_ sender: UIBarButtonItem) {
let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
switch photoAuthorizationStatus {
case .authorized: print("Access is granted by user")
case .notDetermined:
PHPhotoLibrary.requestAuthorization({ (newStatus) in print("status is \(newStatus)"); if newStatus == PHAuthorizationStatus.authorized { print("success") } })
case .restricted: print("User do not have access to photo album.")
case .denied: print("User has denied the permission.")
}
let imagePickerController = UIImagePickerController()
imagePickerController.delegate = self
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
photosInTheCellNow.append(image)
picker.dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return photosInTheCellNow.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PhotosCollectionViewCell", for: indexPath) as! PhotosCollectionViewCell
return cell
}
func register(_ cellClass: PhotosCollectionViewCell, forCellWithReuseIdentifier identifier: String) { }
}
}
This is the custom cell class
import UIKit
class PhotosCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var imageView: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func prepareForReuse() {
super.prepareForReuse()
}
}
As mentioned by @RaziTiwana, you need to assign the image to your collection view cell in cellForItemAt:indexPath
.
cell.imageView.image = photosInTheCellNow[indexPath.row]
You also need to update the collectionView
once you have picked the image. You added the image to your photosInTheCellNow
property, but you haven't let the collectionView
know the data source changed. You can either reload the entire collectionView
by calling collectionView.reloadData()
or just insert the last row as shown here.
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
photosInTheCellNow.append(image)
let indexPath = IndexPath(item: photosInTheCellNow.count-1, section: 0)
collectionView.insertItems(at: [indexPath])
picker.dismiss(animated: true, completion: nil)
}