2016-09-02 2 views
2

Я использую CVCalendar в приложении для iPhone и хочу отключить даты, находящиеся за пределами диапазона. Даты в календаре должны быть включены только в том случае, если они будут от 4 до 14 дней в будущем. У меня есть функция с именем disableOutsideDays() с попытками выполнить это, но она работает только эпизодически, например, когда открывается календарное представление, но не тогда, когда пользователь прокручивается до следующего или предыдущих месяцев.CVCalendar Дата отключения iOS не работает при смене месяцев

func disableOutsideDays() { 
    let calendar = NSCalendar.currentCalendar() 
    for weekV in calendarView.contentController.presentedMonthView.weekViews { 
     for dayView in weekV.dayViews { 


      if calendar.compareDate(dayView.date.convertedDate()!, toDate: NSDate(), toUnitGranularity: .Day) == .OrderedAscending || calendar.compareDate(dayView.date.convertedDate()!, toDate: calendar.dateByAddingUnit(.Day, value: 14, toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))!, toUnitGranularity: .Day) == .OrderedDescending { 
       dayView.userInteractionEnabled = false 
       dayView.dayLabel.textColor = calendarView.appearance.dayLabelWeekdayOutTextColor 
      } 
     } 
    } 
} 

Я называю это внутри viewDidLoad, а также didShowNextMonthView и didShowPreviousMonthView. Странная часть состоит в том, что прокрутка к следующему месяцу может показывать все дни как включенные (напротив того, что я хочу), но затем прокрутка назад к текущему месяцу и обратно к следующей снова показывает их как отключенные.

+0

вы пытались задать вопрос на GitHub? –

ответ

0

Для CVCalendar этот код используется, чтобы отключить даты за пределами определенного диапазона.

Для примера: Если вы хотите пользователя получить доступ всех дат между 2017-08-22 к 2017-09-22, используйте ниже две функции непосредственно внутри класса ViewController с началом и окончанием.

func earliestSelectableDate() -> Date { 

     let dateStr = "2017-08-22 12:25:21 +0000" // Date after which all dates will get disabled 

     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ssZ" 
     let date = dateFormatter.date(from:dateStr)! 
     let calendar = Calendar.current 
     let components = calendar.dateComponents([.year, .month, .day, .hour], from: date) 
     let startDate = calendar.date(from:components) 

     return startDate! 
    } 


func latestSelectableDate() -> Date { 

     let dateStr = "2017-09-22 12:25:21 +0000" 

     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ssZ" 
     let date = dateFormatter.date(from:dateStr)! 
     let calendar = Calendar.current 
     let components = calendar.dateComponents([.year, .month, .day, .hour], from: date) 
     let finalDate = calendar.date(from:components) 

     return finalDate! 
    } 

Примечание: - Это не будет работать в режиме просмотра недели