Как получить множественные выборы в UICollection View с помощью Swift 4 - PullRequest
0 голосов
/ 11 октября 2018

Я новичок в разработке и разработке iOS-приложения с нуля (используя swift 4) и хочу сделать что-то вроде ниже.1. Реализовать множественный выбор ячеек в UICollectionView. 2. Передать данные выбранных ячеек на сервер.Пожалуйста, кто-нибудь может мне помочь, как это сделать?Скажите мне процесс и вспомогательные статьи, чтобы сделать это.

Ниже приведено справочное изображение.Заранее спасибо.

Reference Image/Screen

Ответы [ 4 ]

0 голосов
/ 26 августа 2019

Что ж, лучший способ обрабатывать множественные выборы в UICollectionView

1) Включить множественное выделение

myCollectionView.allowsMultipleSelection = true

2) переопределить isSelected var в вашем пользовательском классе ячеек

override var isSelected: Bool {
        didSet {
            if self.isSelected {
                backgroundColor = UIColor.red
            }
            else {
                backgroundColor = UIColor.purple
            }
        }
    }

3) и вы можете получить выбранные элементы indexPath

let items = myCollectionView.indexPathsForSelectedItems
0 голосов
/ 11 октября 2018

Это базовый пример.Вы можете изменить в соответствии с вашими данными.

Когда вы выбираете любую ячейку, вам нужно проверить, что выбранная ячейка уже выбрана ранее или нет.

Если нет, то добавьте выбранную ячейку indexPath в indexArray и значение выбранной ячейки в valueArray.

Если текущая выбранная ячейка была ранее выбрана, то удалите indexPath из indexArray, а также удалите выбранное значение ячейки из valueArray

при continue, нажмите кнопку arrSelectedData для передачи на серверили следующий экран.

Определение массива ниже 3.

var arrData = [String]() // This is your data array
var arrSelectedIndex = [IndexPath]() // This is selected cell Index array
var arrSelectedData = [String]() // This is selected cell data array

// UICollectionView Delegate & DataSource

extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout 
{
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return self.arrData.count
    }

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

        if arrSelectedIndex.contains(indexPath) { // You need to check wether selected index array contain current index if yes then change the color
            cell.vw.backgroundColor = UIColor.red
        }
        else {
            cell.vw.backgroundColor = UIColor.lightGray
        }

        cell.layoutSubviews()
        return cell
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 100, height: 100)
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("You selected cell #\(indexPath.item)!")

        let strData = arrData[indexPath.item]

        if arrSelectedIndex.contains(indexPath) {
            arrSelectedIndex = arrSelectedIndex.filter { $0 != indexPath}
            arrSelectedData = arrSelectedData.filter { $0 != strData}
        }
        else {
            arrSelectedIndex.append(indexPath)
            arrSelectedData.append(strData)
        }

        collectionView.reloadData()
    }
}
0 голосов
/ 11 октября 2018

Вы можете написать код, чтобы включить множественный выбор: -

yourCollectionViewName.allowsMultipleSelection = true   

, затем вы можете сделать это так, чтобы увидеть выбранную ячейку -

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    var cell = collectionView.cellForItemAtIndexPath(indexPath)
    if cell?.selected == true {
        cell?.backgroundColor = UIColor.orangeColor()
    }
}

Чтобы отменить выборможет сделать что-то вроде этого -

func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) {        
   var cell = collectionView.cellForItemAtIndexPath(indexPath)
   cell?.backgroundColor = UIColor.clearColor()
}
0 голосов
/ 11 октября 2018

Ну, чтобы достичь такой цели, вам нужно в основном выполнять следующие задачи

  1. Когда пользователь нажимает на конкретную ячейку, вам нужно изменить цвет фона для этого item в методе делегата didSelectItemAt из UICollectionView

  2. Теперь, чтобы отправить эти данные на сервер , вам нужно array длясохранить все выбранные ячейки, а затем отправить этот массив на сервер.Вы можете выполнить то же самое в didSelectItemAt методе

Я могу показать вам прототип того, как будет выглядеть функция:

Предположим, у вас есть массивс именем arrayForPopulating для заполнения данных внутри Collection View, и у нас есть массив с именем finalSelections, который состоит из имен всех выборок, которые пользователь сделал

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

   let cell = collectionView.cellForItem(at: indexPath)

   // Change the background colour of the cell here
   cell.contentView.backgroundColor = UIColor.red

   // Add the selected cell's data to the array
   finalSelections.append(arrayForPopulating[indexPath.row])

}

Теперь вы можете отправить массив finalSelections всервер!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...