Theo Stangas
Theo Stangas

Reputation: 9

Selecting and Deleting Images in a Collection View

How would I select multiple images and either bring up the view with sharing options or be able to delete them from the collection view? I am relatively new to programming and if someone has a solution or knows of a better way to do this, please respond, as it would be greatly beneficial. Thank you.

class ViewController: UICollectionViewController, UIImagePickerControllerDelehye5gate, UINavigationControllerDelegate, UICollectionViewDelegateFlowLayout {
    @IBOutlet weak var imageViewTwo: UIImageView!

    var imageArray = [UIImage]()

    override func viewDidLoad() {
        super.viewDidLoad()
        imageViewTwo.isHidden = true
    }

    @IBAction func chooseImage(_ sender: UIBarButtonItem) {
        let imagePickerController = UIImagePickerController()
        imagePickerController.delegate = self

        let actionSheet = UIAlertController(title: "Photo Source", message: "Choose a Source", preferredStyle: .actionSheet)

        actionSheet.addAction(UIAlertAction(title: "Camera", style: .default, handler: { (action: UIAlertAction) in
            if UIImagePickerController.isSourceTypeAvailable(.camera) {
                imagePickerController.sourceType = .camera
                self.present(imagePickerController, animated: true, completion: nil)
            } else {
                print("Camera is not available.")
            }
        }))

        actionSheet.addAction(UIAlertAction(title: "Photo Library", style: .default, handler: { (action: UIAlertAction) in
            imagePickerController.sourceType = .photoLibrary
            self.present(imagePickerController, animated: true, completion: nil)
        }))

        actionSheet.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil))

        self.present(actionSheet, animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage

        imageViewTwo.image = image
        imageArray.append(imageViewTwo.image!)
        collectionView.reloadData()

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

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return imageArray.count
    }

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)

        let imageView = cell.viewWithTag(1) as! UIImageView
        imageView.image = imageArray[indexPath.row]
        return cell
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let width = collectionView.frame.width / 3 - 1

        return CGSize(width: width, height: width)
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 1.0
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 1.0
    }
}

Upvotes: 0

Views: 757

Answers (1)

Ehsan
Ehsan

Reputation: 668

In your cellForItemAt

override func collectionView(_ collectionView: UICollectionView, cellForItemAt 
    indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)

    let imageView = cell.viewWithTag(1) as! UIImageView
    imageArray.append(imageViewTwo.image!)
    imageView.image = imageArray[indexPath.row]
    return cell
}

You have this line

imageArray.append(imageViewTwo.image!)

This is adding the extra images to the array, you have already added the image to this array in your didFinishPickingMediaWithInfo method, this is causing the duplication.

Upvotes: 1

Related Questions