UICollectionViewCell不显示从UIImagePickerController中挑选的图像

问题描述 投票:0回答:2

有人可以看到这里的任何错误,阻止单元格“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()
    }
}
swift uiimagepickercontroller
2个回答
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)
    }

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
}
© www.soinside.com 2019 - 2024. All rights reserved.