Я пытаюсь изменить цвет заливки определенных дат, которые являются частью текущего месяца.
Моя проблема: это работает только для первоначально отображаемого месяца .
Если я проведу пальцем назад или вперед к следующему / предыдущему месяцу, цвета фона будут назначаться случайным датам.
Примеры
Первоначально отображаемый месяц (работает как положено):
Предыдущий месяц (неправильное назначение цвета):
My View Controller
import Foundation
import FSCalendar
// MARK: - Class: CalendarViewController
class CalendarViewController: UIViewController, FSCalendarDelegate, FSCalendarDelegateAppearance {
// MARK: Instance Properties
fileprivate lazy var dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd"
return formatter
}()
var uncessfulTrainingDays: [String] = []
var notcompletedTrainingDays: [String] = []
// MARK: IBOutlets
@IBOutlet private weak var meetingInfoView: UIView!
@IBOutlet private weak var milestoneReachedLabel: UILabel!
@IBOutlet private weak var nextMilestoneLabel: UILabel!
@IBOutlet private weak var calendar: FSCalendar!
@IBOutlet private weak var nextMeetingDateLabel: UILabel!
@IBOutlet private weak var nextMeetingDescriptionLabel: UILabel!
// MARK: Overridden Methods
override func viewDidLoad() {
super.viewDidLoad()
uncessfulTrainingDays = ["2019/01/06"]
notcompletedTrainingDays = []
meetingInfoView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.meetingPressed)))
calendar.delegate = self
calendar.select(Date())
nextMeetingDateLabel.text = "26.12.2018"
nextMeetingDescriptionLabel.text = "Meeting: check healing progress"
}
func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, fillDefaultColorFor date: Date) -> UIColor? {
let currentDate = Date()
let key = self.dateFormatter.string(from: date)
let cal = Calendar.current
// Is date in the curently displayed month?
let monthOfDate = cal.component(.month, from: date)
let monthOfCal = cal.component(.month, from: calendar.currentPage)
let isInDisplayedMonth = monthOfDate == monthOfCal
if isInDisplayedMonth {
if self.uncessfulTrainingDays.contains(key) {
return UIColor(named: "DarkRed")
} else if date < currentDate {
return UIColor(named: "PrimaryAccent")
}
}
return nil
}
}
Кажется, что мое представление FSCalendar не обновляется должным образом, когда я перемещаюсь назад или вперед к предыдущему / следующему месяцу.
Есть идеи, что может быть не так с моим кодом?