Удаление нескольких изображений в виде коллекции - PullRequest
0 голосов
/ 15 октября 2018

Как бы я удалил изображение из моей коллекции изображений?Во-вторых, как бы я выбрал несколько изображений и либо поднял вид с опциями обмена, либо смог бы удалить их из представления коллекции?Я относительно новичок в программировании, и если у кого-то есть решение или он знает лучший способ сделать это, пожалуйста, ответьте, так как это было бы очень полезно.Спасибо.

class ViewController: UICollectionViewController, UIImagePickerControllerDelegate, 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
    }

var itemsSelected = [IndexPath]()

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        collectionView.allowsMultipleSelection = true
    if !(itemsSelected.contains(indexPath)) {
        itemsSelected.append(indexPath)
    }
}
@IBAction func deletePressed(_ sender: UIBarButtonItem) {

    itemsSelected.forEach {
        imageArray.remove(at:$0.row)
    }
    collectionView.deleteItems(at:itemsSelected)
    itemsSelected.removeAll()
}



}

1 Ответ

0 голосов
/ 16 октября 2018

Для удаления 1 изображения

let index = 0 // or any number < imageArray.count
imageArray.remove(at:index)  
collectionView.deleteItems(at: [IndexPath(row: index, section: 0)])

Для удаления многих строк сначала необходимо включить

collectionView.allowsMultipleSelection = true

и создать массив для хранения выбранных строк, например

var itemsSelected = [IndexPath]()

Когда пользователь нажимает didSelectItemAt do

if !(itemsSelected.contains(indexPath)) {
  itemsSelected.append(indexPath)
}

Если вы хотите удалить их, выполните

itemsSelected.forEach {
  imageArray.remove(at:$0.row)
}
collectionView.deleteItems(at:itemsSelected)
itemsSelected.removeAll()
...