Search code examples
iosswiftuiimageviewuiimagepickercontroller

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


Solution

  • 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)
    }