所以这里有解决问题的函数:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let cell = calendarView.cellForItem(at: indexPath) as? CalendarCell else { return }
if cell.isSelectable! {
if selectedDates.filter({ $0.isDateSameDay(cell.currentDate)
}).count == 0 {
selectedDates.append(cell.currentDate)
cell.selectCell(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1))
selectTodayCell(cell: cell)
} else {
deselectCell(cell:cell)
setTodayCellColor(cell: cell)
print(selectedDates)
}
}
}
private func deselectCell(cell: CalendarCell) {
selectedDates = selectedDates.filter() {
return !($0.isDateSameDay(cell.currentDate))
}
if cell.currentDate.isSaturday() || cell.currentDate.isSunday() {
cell.deselectCell(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1))
}
else {
cell.deselectCell(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1))
}
}
非常简单的日期延长:
func isDateSameDay(_ date: Date) -> Bool {
return (self.day() == date.day()) && (self.month() == date.month() && (self.year() == date.year()))
}
所以问题是取消选择已经选中的单元格。您只需按一次以选择单元格,然后两次取消选择它。 我试图让它成为一个选择,一个用于取消选择。 单元格类中的函数基本上只是更改标签textColor和背景颜色,因此发布它们没有任何意义。 我在整个项目中都没有任何手势识别器,我想知道过滤器功能是否对设备要求很高,是否会产生这个奇怪的错误?或者应该在异步块中调用deselectCell?