Ошибка настройки FSCalendar при просмотре на другой месяц - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь изменить цвет заливки определенных дат, которые являются частью текущего месяца.

Моя проблема: это работает только для первоначально отображаемого месяца . Если я проведу пальцем назад или вперед к следующему / предыдущему месяцу, цвета фона будут назначаться случайным датам.

Примеры

Первоначально отображаемый месяц (работает как положено): Initially displayed month Предыдущий месяц (неправильное назначение цвета):

Previous month

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 не обновляется должным образом, когда я перемещаюсь назад или вперед к предыдущему / следующему месяцу.

Есть идеи, что может быть не так с моим кодом?

1 Ответ

0 голосов
/ 08 января 2019

Эта функция решила мою проблему:

func calendarCurrentPageDidChange(_ calendar: FSCalendar) {
        calendar.reloadData()
}
...