如何通过单击按钮选择所有UICollectionView单元格并取消选择?

时间:2019-06-09 16:43:40

标签: ios swift uicollectionview uicollectionviewcell jquery-ui-selectable

我需要实现一些过滤器标签超过15个的过滤器, 我添加了水平CollectionView,自定义单元格和两个数组。 单选效果很好, 但我需要全选并通过单击按钮取消全选 知道如何实现吗?

Selecting all the items in UICollectionView iOS, even the cells that are not visible

这个不起作用


 var arraySelectedFilterIndex = [IndexPath]()
 var arraySelectedFilterData = [String]()

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

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

        cell.titleL.text = String(filterTitles[indexPath.row])
        cell.pointIMG.image = UIImage(named: filterTitles[indexPath.row] + "40")

        if arraySelectedFilterIndex.contains(indexPath) { // You need to check wether selected index array contain current index if yes then change the color
            cell.isSelected = true
        }
        else {
            cell.isSelected = false
        }

        cell.layoutSubviews()
        return cell
    }

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

        let strData = filterTitles[indexPath.item]

        if arraySelectedFilterIndex.contains(indexPath) {
            arraySelectedFilterIndex = arraySelectedFilterIndex.filter { $0 != indexPath}
            arraySelectedFilterData = arraySelectedFilterData.filter { $0 != strData}
        }
        else {
            arraySelectedFilterIndex.append(indexPath)
            arraySelectedFilterData.append(strData)
        }
        collectionView.reloadData()
        print(arraySelectedFilterData)
    }

@IBAction func selectAllA(_ sender: Any) {. 

//here need add code with All Select and Deselect functions

}

1 个答案:

答案 0 :(得分:0)

我不确定为什么有时使用“ indexPath.row”,有时使用“ indexPath.item”。

无论如何,您的函数应该看起来像这样

@IBAction func selectAllA(_ sender: Any) {
        arraySelectedFilterIndex.removeAll()
        arraySelectedFilterData.removeAll()

        for (index, element) in self.filterTitles.enumerated() {
            arraySelectedFilterIndex.append(IndexPath(item: index, section: 0))
            arraySelectedFilterData.append(element)
        }

        collectionView.reloadData()
        print(arraySelectedFilterData)
    }

首先,您要清除以前的选择以避免重复,但是可以使用map / dictionary结构来避免重复而不是列表。

然后为每个元素将索引和数据添加到所选列表。最终重新加载数据,我保留了最后的打印内容,以便您进行检查。