kimpro
kimpro

Reputation: 107

how to use multiple image picker in iOS with swift

I'm making dating app. as you know, users need to register multiple pictures in dating app.

so i got how to use 1 image picker in one view.

but i don't know how to add multiple image picker.

i know i can only use only one

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {  
}

and

func imagePickerControllerDidCancel(picker: UIImagePickerController) {
    picker.dismissViewControllerAnimated(false, completion:nil)
}

so i cant find solution for multiple imagepicker view.

my failed code is below.

import UIKit

class RegisterPicture : UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {


@IBAction func pick1(sender: AnyObject) {

    let picker1 = UIImagePickerController()

    picker1.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum

    picker1.allowsEditing = true

    picker1.delegate = self

    self.presentViewController(picker1, animated: false, completion: nil)
}

@IBAction func pick2(sender: AnyObject) {

    let picker2 = UIImagePickerController()

    picker2.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum

    picker2.allowsEditing = true

    picker2.delegate = self

    self.presentViewController(picker2, animated: false, completion: nil)
}

@IBOutlet var picture1: UIImageView!

@IBOutlet var picture2: UIImageView!

func imagePickerController(picker1: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

    picker1.dismissViewControllerAnimated(false, completion : nil)
    self.picture1.image = info[UIImagePickerControllerOriginalImage] as? UIImage

}

func imagePickerController(picker2: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

    picker2.dismissViewControllerAnimated(false, completion : nil)
    self.picture2.image = info[UIImagePickerControllerOriginalImage] as? UIImage

}


func imagePickerControllerDidCancel(picker1: UIImagePickerController) {

    picker1.dismissViewControllerAnimated(false, completion:nil)

}

func imagePickerControllerDidCancel(picker2: UIImagePickerController) {

    picker2.dismissViewControllerAnimated(false, completion:nil)

}
}

Upvotes: 2

Views: 22573

Answers (5)

ADB
ADB

Reputation: 719

For anyone searching for this in 2020, Apple introduced PHPickerViewController in iOS14. Here's the documentation: https://developer.apple.com/documentation/photokit/phpickerviewcontroller

And the WWDC introduction that explains its usage: https://developer.apple.com/videos/play/wwdc2020/10652/

Upvotes: 11

Muhammad Ahmad
Muhammad Ahmad

Reputation: 398

You can't use UIImagePickerController, but you can use a custom image picker. I think ELCImagePickerController is the best option, but here are some other libraries you could use:

Objective-C

  1. ELCImagePickerController
  2. WSAssetPickerController
  3. QBImagePickerController
  4. ZCImagePickerController
  5. CTAssetsPickerController
  6. AGImagePickerController
  7. UzysAssetsPickerController
  8. MWPhotoBrowser
  9. TSAssetsPickerController
  10. CustomImagePicker
  11. InstagramPhotoPicker
  12. GMImagePicker
  13. DLFPhotosPicker
  14. CombinationPickerController
  15. AssetPicker
  16. BSImagePicker
  17. SNImagePicker
  18. DoImagePickerController
  19. grabKit
  20. IQMediaPickerController
  21. HySideScrollingImagePicker
  22. MultiImageSelector
  23. TTImagePicker
  24. SelectImages
  25. ImageSelectAndSave
  26. imagepicker-multi-select
  27. MultiSelectImagePickerController
  28. YangMingShan(Yahoo like image selector)
  29. DBAttachmentPickerController
  30. BRImagePicker
  31. GLAssetGridViewController
  32. CreolePhotoSelection

Swift

  1. LimPicker (Similar to WhatsApp's image picker)
  2. RMImagePicker
  3. DKImagePickerController
  4. BSImagePicker
  5. Fusuma(Instagram like image selector)
  6. YangMingShan(Yahoo like image selector)
  7. NohanaImagePicker
  8. ImagePicker
  9. OpalImagePicker
  10. TLPhotoPicker
  11. AssetsPickerViewController
  12. Alerts-and-pickers/Telegram Picker

Upvotes: -1

Harshit Modi
Harshit Modi

Reputation: 11

@IBAction func btnTrophy1Action(_ sender: UIButton) {
        //GIVE TAG TO YOUR BUTTON
        self.view.endEditing(true)
        self.senderTag = sender.tag
        pickerOpen(sender: sender)
    }

@IBAction func btnTrophy2Action(_ sender: UIButton) {
        //GIVE TAG TO YOUR BUTTON
        self.view.endEditing(true)
        self.senderTag = sender.tag
        pickerOpen(sender: sender)
    }

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

        if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
            //BASED ON THE TAG SAVE IMAGE TO PARTICULAR IMAGE PICKER
            if self.senderTag == 101 {
                //TROPHY 1
                self.imgTrophy1.image = image
                self.isTrophy1Selected = true
            } else if self.senderTag == 102 {
                //TROPHY 2
                self.imgTrophy2.image = image
                self.isTrophy2Selected = true
            } else {
                //TROPHY 3
                self.imgTrophy3.image = image
                self.isTrophy3Selected = true
            }
        }
        picker.dismiss(animated: true, completion: nil)
    }

Upvotes: 1

Kelvin Omereshone
Kelvin Omereshone

Reputation: 836

Here is a solution I tried out to address this sort of problem

I used a single image picker then use an enum holding strings to determine which image view gets the image selected by the user.

enum selectableImage: String {
        case image1
        case image2
        case image3
    }

then on each call of the imagePickerController, I assign a variable var imageSelected = selectableImage.image1 like so. Then finally in the imagePickerController, I used the switched structure like so:

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

        print("Inside imageController")

        print(info)
        // The info dictionary may contain multiple representations of the image. You want to use the original.

        guard let imagePicked = info[.originalImage] as? UIImage else {
            fatalError("Expected a dictionary containing an image, but was provided the following: \(info)")
        }

        // Set photoImageView to display the selected image.

        switch imageSelected {

        case selectableImage.image1:
             image1.image = imagePicked

        case selectableImage.image2:
             image2.image = imagePicked

        case selectableImage.image3:
            image3.image = imagePicked

        }


        // Dismiss the picker.
        dismiss(animated: true, completion: nil)
    }

Hope this helps.

Upvotes: 0

JJJ
JJJ

Reputation: 2909

You can't select more than one image with UIImagePickerController. You either have to make your own custom image picker that can or use a 3rd party's like this one.

Upvotes: 3

Related Questions