从UIImagePickerController中选择的图像没有显示在UIImageView中
我想从UIImageView控件中的UIImagePickerController中拿着UIImageView显示选定的图像。我能够打开并加载imagePicker,但是当我选择一个图像时,UIImageView仍然具有硬原始占位符图像。我相信它与将selectedImage传递到实际单元格中有关,而不是传递给loginController,但我不确定。预先感谢任何帮助!从UIImagePickerController中选择的图像没有显示在UIImageView中
// 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
}
您在这里创造的LoginCell
一个新实例:
if let selectedImage = selectedImageFromImagePicker {
let loginCell = LoginCell()
loginCell.profileImageView.image = selectedImage
}
您应该删除第二行,让您使用的是类变量命名为loginCell
,而不是当地的一个,这就是,根据你的代码,没有显示在任何地方。在imagePickerController的dismissblock完成loginCdell的
if let selectedImage = selectedImageFromImagePicker {
loginCell.profileImageView.image = selectedImage
}
集图像:
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中的选定图像关闭。 – user3708224
无论你是在viewWillAppear.hen中创建你的logincell的实例,使它在viewDidLoad – Arnav
呀,我居然做了尝试,并且同样的事情发生。我添加了我的cellForRowAtIndexPath方法,其中我将loginCell设置为委托。 – user3708224