我需要实现一些过滤器标签超过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
}
答案 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结构来避免重复而不是列表。
然后为每个元素将索引和数据添加到所选列表。最终重新加载数据,我保留了最后的打印内容,以便您进行检查。