lovelaceada
lovelaceada

Reputation: 187

Swift 4 Image Picker Not Changing UIImageView

For some reason in my new project this code is not working which has worked for me before. The current code does not change the ui of profileImage.

Delegates

UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIGestureRecognizerDelegate

Code:

@IBOutlet weak var profileImage: UIImageView!

@IBAction func changeProfilePicture(_ sender: Any) {
        print("Profile picture tapped")

        let pickerController = UIImagePickerController()
        pickerController.delegate = self
        pickerController.allowsEditing = true

        let alertController = UIAlertController(title: "Add Picture", message: "", preferredStyle: .actionSheet)

        let photoLibraryAction = UIAlertAction(title: "Photo Library", style: .default) { (action) in
            pickerController.sourceType = .photoLibrary
            self.present(pickerController, animated: true, completion: nil)
        }


        let cancelAction = UIAlertAction(title: "Cancel", style: .destructive, handler: nil)
        alertController.addAction(photoLibraryAction)
        alertController.addAction(cancelAction)
        present(alertController, animated: true, completion: nil)
    }

   @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : Any]?) {

        self.profileImage.image = image
        self.dismiss(animated: true, completion: nil)

    }

Console Output

errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled}

I have tried

   @objc func

    internal func

    @objc internal func

self.profileImage.image = image does not set the UI and change the image

Upvotes: 0

Views: 720

Answers (1)

Shehata Gamal
Shehata Gamal

Reputation: 100503

Correct delegate method

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

   if let image = info[.originalImage] as? UIImage {
      self.profileImage.image = image
   }
   else
     if let image = info[.editedImage] as? UIImage {
      self.profileImage.image = image
    }
     self.dismiss(animated: true, completion: nil)
}

Upvotes: 2

Related Questions