Swift сделать выбор / отмена выбора в режиме одиночного / множественного выбора для UICollectionView внутри UITableViewCell - PullRequest
0 голосов
/ 08 января 2020

Я новичок в iOS и хочу реализовать UICollectionView внутри UITableView, который может иметь множественный выбор / отмена выбора в разделе 1 UITableview. А в разделе 2 разрешен только один выбор. И сохраните событие выбора состояния, если я уволю Viewcontroller и при повторном его открытии он должен отобразить последнюю выбранную ячейку в качестве выделения.

Я искал учебники, но все они не упоминают, чтобы выбрать / отменить выбор состояние ячейки сбора или состояние сохранения после закрытия контроллера представления.

Может ли кто-нибудь помочь реализовать его?

Заранее благодарен!

Вот мой код, который я делаю до сих пор :

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

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "clvCell", for: indexPath) as! demoCollectionViewCell
        cell.title.text = clvData[indexPath.item] as? String
        return cell

}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath)
    cell?.backgroundColor = .red
}

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath)
    cell?.backgroundColor = .white
}

вы, ребята, также можете проверить мой проект здесь: https://mega.nz/#! XRs0EQyQ

1 Ответ

0 голосов
/ 09 января 2020

попробуйте это и дайте мне знать, если у вас есть какие-либо проблемы или это решило вашу проблему.


    var arrSelectedIndex:[IndexPath] = []// store this array either in database by api or in local
    var clvData:[String] = []// your data array

    //get the arrSelectedIndex from default in viewDidLoad before reloading the table and collection. 
    override func viewDidLoad() {
        super.viewDidLoad()
        if let myArray = UserDefaults.standard.array(forKey: "selectedArray") as? [IndexPath] {
            arrSelectedIndex = myArray
        } else {
            arrSelectedIndex = []
        }
    }

    // and save the arrSelectedIndex in viewWillDisappear method
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        UserDefaults.standard.set(arrSelectedIndex, forKey: "selectedArray")
    }

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

        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "clvCell", for: indexPath) as! demoCollectionViewCell
            cell.title.text = clvData[indexPath.item] as? String

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

            return cell

        }

        func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
            let cell = collectionView.cellForItem(at: indexPath)
            cell?.backgroundColor = .red
            if !arrSelectedIndex.contains(indexPath) {// if it does not contains the index then add it
                arrSelectedIndex.append(indexPath)
            }
        }

        func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
            let cell = collectionView.cellForItem(at: indexPath)
            cell?.backgroundColor = .white
            if let currIndex = arrSelectedIndex.firstIndex(of: indexPath) {// if it contains the index then delete from array
                arrSelectedIndex.remove(at: currIndex)
            }
        }

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