Search code examples
iosswiftuiimageuiimagepickercontroller

How to select Three images with three buttons in Swift


On my screen I need to add three images for that I have three separate buttons

code: here EasyImagePicker is my custom imagepicker.. but with my below code if I select any one image from imagepicker then it's adding in all three images

class EditProfileImagesVC: UIViewController {
    
    private var imagePicker : EasyImagePicker?
    private var imagePicker1 : EasyImagePicker?
    private var imagePicker2 : EasyImagePicker?
    
    
    @IBOutlet weak var profilePicImage: UIImageView!
    @IBOutlet weak var leftProfilePicImg: UIImageView!
    @IBOutlet weak var rightProfilePicImg: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        imagePicker = EasyImagePicker(presentationController: self, delegate: self)
        imagePicker1 = EasyImagePicker(presentationController: self, delegate: self)
        imagePicker2 = EasyImagePicker(presentationController: self, delegate: self)
        
    }
    
    @IBAction func profilePicBtn(_ sender: UIButton) {
        imagePicker?.present(from: sender, mediaType: .images, onViewController: self)
    }
    
    @IBAction func leftProfileBtn(_ sender: UIButton) {
        imagePicker1?.present(from: sender, mediaType: .images, onViewController: self)
    }
    
    @IBAction func rightProfileBtn(_ sender: UIButton) {
        imagePicker2?.present(from: sender, mediaType: .images, onViewController: self)
    }
}

extension EditProfileImagesVC : EasyImagePickerDelegate{
    
    func didSelect(image: UIImage?, video: URL?, fileName: String?) {
        if let img = image{
            profilePicImage.image = img
        }
        if let img1 = image{
            leftProfilePicImg.image = img1
        }
        if let img2 = image{
            rightProfilePicImg.image = img2
        }
    }
}

how to select three different images for three images using imagepicker.. please do guide me


Solution

  • The reason is there is no thing here that can differentiate which button is clicked , hence result set to all imageviews

    func didSelect(image: UIImage?, video: URL?, fileName: String?) {
        if let img = image{
            profilePicImage.image = img
        }
        if let img1 = image{
            leftProfilePicImg.image = img1
        }
        if let img2 = image{
            rightProfilePicImg.image = img2
        }
    } 
    

    You need

    enum ImageChooser {
      case profile,left,right
    }
    class EditProfileImagesVC: UIViewController { 
        private var imagePicker : EasyImagePicker?
        @IBOutlet weak var profilePicImage: UIImageView!
        @IBOutlet weak var leftProfilePicImg: UIImageView!
        @IBOutlet weak var rightProfilePicImg: UIImageView!
        var chooser:ImageChooser = .profile
        override func viewDidLoad() {
            super.viewDidLoad()
    
            imagePicker = EasyImagePicker(presentationController: self, delegate: self)
    
        }
    
        @IBAction func profilePicBtn(_ sender: UIButton) {
            chooser = .profile
            imagePicker?.present(from: sender, mediaType: .images, onViewController: self)
        }
    
        @IBAction func leftProfileBtn(_ sender: UIButton) {
            chooser = .left
            imagePicker1?.present(from: sender, mediaType: .images, onViewController: self)
        }
    
        @IBAction func rightProfileBtn(_ sender: UIButton) {
            chooser = .right
            imagePicker2?.present(from: sender, mediaType: .images, onViewController: self)
        }
    }
    
    
    extension EditProfileImagesVC : EasyImagePickerDelegate{
    
        func didSelect(image: UIImage?, video: URL?, fileName: String?) {
            if let img = image {
                if chooser == .profile {
                    profilePicImage.image = img
                }
                else
                    if chooser == .left {
                        leftProfilePicImg.image = img
                    }
                    else
                        if chooser == .right {
                            rightProfilePicImg.image = img
                        }
            }
                     
        }
    }