UICollectionViewCell不显示从UIImagePickerController拾取的图像

时间:2019-04-10 22:44:20

标签: swift uiimagepickercontroller

有人可以在这里看到阻止单元格“ photoInTheCellnow”显示图像选择器中的UIImage值的任何错误

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) { }
   }
}

这是自定义单元格类

import UIKit

class PhotosCollectionViewCell: UICollectionViewCell {


    @IBOutlet weak var imageView: UIImageView!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func prepareForReuse() {
        super.prepareForReuse()
    }
}

2 个答案:

答案 0 :(得分:1)

如@RaziTiwana所述,您需要将图像分配给cellForItemAt:indexPath中的集合视图单元格。

cell.imageView.image =  photosInTheCellNow[indexPath.row]

选择图像后,您还需要更新collectionView。您已将图像添加到photosInTheCellNow属性中,但没有让collectionView知道数据源已更改。您可以通过调用collectionView重新加载整个collectionView.reloadData(),或仅插入最后一行,如下所示。

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)
    }

答案 1 :(得分:0)

您丢失了

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

    cell.imageView.image =  photosInTheCellNow[indexPath.row]

    return cell
}