Как отключить прошедшую дату в ckcalendar?
Я ищу, как отключить прошлые даты в CKCalendar. Например, я хочу отключить все даты до текущей даты. Только сегодняшняя дата и будущая дата должны быть кликабельными.
3 ответа
В дополнение к комментарию Ларма (установка calendar:willSelectDate для возврата NO для прошлых дат), если вы хотите настроить цвета для этих "отключенных дат", вы можете сделать это, настроив метод делегата configureDateItem: forDate:.
Пример:
- (void)calendar:(CKCalendarView *)calendar configureDateItem:(CKDateItem *)dateItem forDate:(NSDate *)date {
if([date laterDate:minimumDate] == minimumDate) {
dateItem.textColor = [UIColor grayColor];
}
}
Приведенный выше код устанавливает цвет текста всех прошедших дат на серый.
Пример для метода делегата willSelectDate:
- (BOOL)calendar:(CKCalendarView *)calendar willSelectDate:(NSDate *)date {
if ([date laterDate:minimumDate] == minimumDate) {
return NO;
}
return [calendar dateIsInCurrentMonth:date];
}
Приведенный выше код отключает выбор всех прошедших дат.
Если вы ищете решение SwiftUI..
Сначала вам нужно сделать частичный диапазон, если вы хотите, чтобы предыдущие даты не выбирались
let dateRange: PartialRangeFrom<Date> = {
let calendar = Calendar.current
let startComponents = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: Date.now)
return calendar.date(from: startComponents)!...
}()
затем вы можете настроить средство выбора даты, передавая диапазон, который вы только что создали
DatePicker("", selection: $dueDate, in: dateRange)
.datePickerStyle(.graphical)
.labelsHidden()