0

我正在尝试更改特定日期的填充颜色,这些日期是当前显示月份的一部分。

我的问题:这只适用于最初显示的月份。如果我来回滑动到下一个月/上个月,背景颜色似乎被分配给随机日期。

例子

最初显示的月份(按预期工作): 最初显示的月份 上个月(错误的颜色分配):

前一个月

我的视图控制器

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 视图似乎没有正确更新。

任何想法我的代码可能有什么问题?

4

1 回答 1

0

这个功能解决了我的问题:

func calendarCurrentPageDidChange(_ calendar: FSCalendar) {
        calendar.reloadData()
}
于 2019-01-08T15:05:35.050 回答