2017-08-11 54 views
0

我想从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 
} 

回答

0

您在这里创造的LoginCell一个新实例:

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

您应该删除第二行,让您使用的是类变量命名为loginCell,而不是当地的一个,这就是,根据你的代码,没有显示在任何地方。在imagePickerController的dismissblock完成loginCdell的

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

呀,我居然做了尝试,并且同样的事情发生。我添加了我的cellForRowAtIndexPath方法,其中我将loginCell设置为委托。 – user3708224

0

集图像:

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

谢谢,逻辑是有道理的 - 但仍然不显示profileImageView中的选定图像关闭。 – user3708224

+0

无论你是在viewWillAppear.hen中创建你的logincell的实例,使它在viewDidLoad – Arnav

相关问题