【问题标题】:Selected Image from UIImagePickerController not showing up in UIImageView从 UIImagePickerController 中选择的图像未显示在 UIImageView 中
【发布时间】:2017-08-11 18:57:03
【问题描述】:

我正在尝试在包含 UIImageView 的 collectionViewCell 中显示来自 UIImagePickerController 的选定图像。我能够打开并加载 imagePicker,但是当我选择图像时,UIImageView 仍然具有原始占位符图像。我相信这与将 selectedImage 传递到实际单元格而不是 loginController 相关,但我不确定。提前感谢您的帮助!

// loginCell 类 类 LoginCell: UICollectionViewCell, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

lazy var profileImageView: UIImageView = {
    let imageView = UIImageView()
    imageView.image = UIImage(named: "imagefile")
    //...
    imageView.addGestureRecognizer(UITapGestureRecognizer(target:self, action: #selector(handleSelectProfileImage)))
    imageView.isUserInteractionEnabled = true
    return imageView
}()

var loginController: LoginController?

func handleSelectProfileImage() {
    guard let loginController = delegate as? LoginController else {
        return
    }
    loginController.showImagePicker()
}

}

// 登录控制器类 类 LoginController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, LoginControllerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

weak var loginCollectionView: UICollectionView!

func showImagePicker() {
    let picker = UIImagePickerController()
    picker.delegate = self
    picker.allowsEditing = true
    present(picker, animated: true, completion: nil)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    var selectedImageFromImagePicker: UIImage?

    if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
        selectedImageFromImagePicker = editedImage
    } else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {
        selectedImageFromImagePicker = originalImage
    }

    if let selectedImage = selectedImageFromImagePicker {
        loginCell.profileImageView.image = selectedImage
    }
    dismiss(animated: true, completion: nil)
}

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    dismiss(animated: true, completion: nil)
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let loginCell = collectionView.dequeueReusableCell(withReuseIdentifier: loginCellId, for: indexPath) as! LoginCell
        loginCell.delegate = self
        return loginCell
}

【问题讨论】:

    标签: swift uiimageview delegates uiimagepickercontroller


    【解决方案1】:

    您正在此处创建LoginCell 的新实例:

    if let selectedImage = selectedImageFromImagePicker {
        let loginCell = LoginCell()
        loginCell.profileImageView.image = selectedImage
    }
    

    您应该删除第二行,因此您使用的是名为 loginCell 的类变量,而不是本地变量,根据您的代码,它不会在任何地方显示。

    if let selectedImage = selectedImageFromImagePicker {
        loginCell.profileImageView.image = selectedImage
    }
    

    【讨论】:

    • 是的,我确实尝试过,同样的事情发生了。我添加了我的 cellForRowAtIndexPath 方法,其中我将 loginCell 设置为委托。
    【解决方案2】:

    在imagePickerController的dismissblock完成时设置loginCdell的图片:

    func imagePickerController(_ picker: UIImagePickerController, 
    didFinishPickingMediaWithInfo info: [String : Any]) {
    
    var selectedImageFromImagePicker: UIImage?
    
    if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
        selectedImageFromImagePicker = editedImage
    } else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {
        selectedImageFromImagePicker = originalImage
    }
    
    
    dismiss(animated: true, completion:{
    if let selectedImage = selectedImageFromImagePicker {
        loginCell.profileImageView.image = selectedImage
    }
    })
    }
    

    【讨论】:

    • 谢谢,逻辑是有道理的——但在关闭时仍然没有在 profileImageView 中显示选定的图像。
    • 是否在 viewWillAppear.hen 中创建 logincell 实例,在 viewDidLoad 中创建
    猜你喜欢
    • 2020-09-06
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多