【发布时间】: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