Это проснулось для меня.Я построил два метода: один для handleMultipleCellSelection
, чтобы проверить максимальное выбранное количество элементов, а другой для handleCellSelection
.
Этот метод handleMultipleCellSelection
вызывается в didSelectItemAt
из UICollectionViewDelegate
var selectedServicesId = NSMutableArray()
func handleMultipleCellSelection(_ cell: UICollectionViewCell, indexPath: IndexPath){
if self.selectedServicesId.count < 3 {
self.handleCellSelection(cell, indexPath: indexPath)
}else{
if self.selectedServicesId.contains(servicesData!.data[indexPath.row].id){
handleCellSelection(cell, indexPath: indexPath)
}else{
let alert = UIAlertController(title: "Attention", message: "You can not select more than three items", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .destructive, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
}
func handleCellSelection(_ cell: UICollectionViewCell, indexPath: IndexPath){
if cell.backgroundColor == UIColor.white{
cell.backgroundColor = UIColor(hexString: "#FFB74D")
self.selectedServicesId.add(servicesData!.data[indexPath.row].id)
self.searchView.alpha = 1
}else{
cell.backgroundColor = UIColor.white
self.selectedServicesId.remove(servicesData!.data[indexPath.row].id)
if selectedServicesId.count == 0{
self.searchView.alpha = 0
}
}
}
}
и в вашем didSelectItemAt
:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell : UICollectionViewCell = collectionView.cellForItem(at: indexPath) as! CategoryCollectionViewCell
handleMultipleCellSelection(cell, indexPath: indexPath)
}