user11657919
user11657919

Reputation:

Use UIImagePicker to set the image in a UIImageView

This is how my code currently looks like. What I expect to happen is the profileImage (UIImageView) to display the selected image as currently it is not happening.

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet var profileImage: UIImageView!

let picker = UIImagePickerController()

override func viewDidLoad() {
        super.viewDidLoad()

        picker.delegate = self
        picker.sourceType = .photoLibrary
}


    @IBAction func photoUploadPressed(_ sender: Any) {

        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
            let myPickerController = UIImagePickerController()
            myPickerController.delegate = self;
            myPickerController.sourceType = .photoLibrary
            self.present(myPickerController, animated: true, completion: nil)

    }


    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage{
            selectedImage = image
            profileImage.image = image
        }
        dismiss(animated: true, completion: nil)
    }

}

Currently the Image Picker comes up, but once selected it does not change the UIImageView's image.

Any help will be much appreciated.

Upvotes: 1

Views: 73

Answers (1)

Afsar Ahamad
Afsar Ahamad

Reputation: 1997

It is working as expected only error in your code is that you have } missing in photoUploadPressed(_ sender: Any) and you have not declared selectedImage & using it inside imagePickerController

Working code

import UIKit

class ViewController: UIViewController , UIImagePickerControllerDelegate, UINavigationControllerDelegate{
let picker = UIImagePickerController()

    var selectedImage: UIImage?
    @IBOutlet weak var profileImage: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        picker.delegate = self
        picker.sourceType = .photoLibrary
    }

    @IBAction func potoUploadPressed(_ sender: Any) {
        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
                   let myPickerController = UIImagePickerController()
                   myPickerController.delegate = self;
                   myPickerController.sourceType = .photoLibrary
                   self.present(myPickerController, animated: true, completion: nil)
        }// It is missing in your code

    }


    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
           if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage{
               selectedImage = image // You have not declared selectedImage
               profileImage.image = image
           }
           dismiss(animated: true, completion: nil)
       }

}



Upvotes: 1

Related Questions