2016-09-02 7 views
2

iPhoneアプリでCVCalendarを使用していて、範囲外の日付を無効にしたい場合。カレンダーの日付は、今後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内部だけでなく、didShowNextMonthViewdidShowPreviousMonthViewことを呼び出します。奇妙な部分は、翌月のスクロールですべての日を有効にして(私が欲しいものとは反対に)表示することができますが、現在の月にスクロールして次の月に戻って再び無効にしていることです。

+0

では動作しません、あなたはgithubの上の質問をしようとしましたか? –

答えて

0

CVCalendarの場合、このコードを使用して特定の範囲外の日付を無効にします。例については

あなたは2017年8月22日間のすべての日付をアクセスするためのユーザー2017年9月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! 
    } 

注: -これは、週ビューモード

関連する問題