I’ve added FSCalendarView bundle in mission and
i’ve created like this in calendar initially fillDefaultColorFor
is exhibiting correctly however when i alter month then it isn’t updating and as nicely not being referred to as additionally why? easy methods to repair this challenge?
struct CalendarData {
var date: Date
var standing: Int
}
struct FSCalendarView: UIViewControllerRepresentable {
var calendarData: [CalendarData]
var onMonthChange: (Date) -> Void
class Coordinator: NSObject, FSCalendarDelegate, FSCalendarDataSource, FSCalendarDelegateAppearance {
var mum or dad: FSCalendarView
init(mum or dad: FSCalendarView) {
self.mum or dad = mum or dad
}
func calendar(_ calendar: FSCalendar, shouldSelect date: Date, at monthPosition: FSCalendarMonthPosition) -> Bool {
return false
}
func calendarCurrentPageDidChange(_ calendar: FSCalendar) {
// Set off the onMonthChange closure when the consumer swipes to a brand new month
let newStartDate = calendar.currentPage
print("Present Month Modified to: (newStartDate)")
mum or dad.onMonthChange(newStartDate)
calendar.reloadData()
}
func calendar(_ calendar: FSCalendar, look: FSCalendarAppearance, fillDefaultColorFor date: Date) -> UIColor? {
if let calendarEntry = mum or dad.calendarData.first(the place: { Calendar.present.isDate($0.date, inSameDayAs: date) }) {
swap calendarEntry.standing {
case 1:
return UIColor(Shade.brandColor) // Current
case 2:
return UIColor.pink // Absent
case 3:
return UIColor(Shade.yellow) // Depart
case 6:
return UIColor.blue // Vacation
case 7:
return UIColor.grey // weekoff
default:
return nil
}
}
return nil
}
// Set textual content shade for dates based mostly on standing
func calendar(_ calendar: FSCalendar, look: FSCalendarAppearance, titleDefaultColorFor date: Date) -> UIColor? {
if let calendarEntry = mum or dad.calendarData.first(the place: { Calendar.present.isDate($0.date, inSameDayAs: date) }) {
return UIColor.white
}
return UIColor.black
}
}
// Create FSCalendar view controller
func makeUIViewController(context: Context) -> UIViewController {
let viewController = UIViewController()
// Create and configure the FSCalendar occasion
let calendar = FSCalendar()
calendar.delegate = context.coordinator
calendar.dataSource = context.coordinator
calendar.look.headerDateFormat = "MMMM yyyy"
calendar.look.headerTitleColor = .white
calendar.look.weekdayTextColor = .darkGray
calendar.look.titleDefaultColor = .label
// calendar.look.selectionColor = .systemRed
calendar.look.titleTodayColor = .black
calendar.look.todayColor = .clear
calendar.placeholderType = .none
calendar.calendarHeaderView.backgroundColor = UIColor(Shade.appGreen)
calendar.calendarWeekdayView.backgroundColor = (UIColor.lightGray).withAlphaComponent(0.5)//UIColor.lightGray
viewController.view.addSubview(calendar)
calendar.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
calendar.topAnchor.constraint(equalTo: viewController.view.topAnchor),
calendar.bottomAnchor.constraint(equalTo: viewController.view.bottomAnchor),
calendar.leadingAnchor.constraint(equalTo: viewController.view.leadingAnchor),
calendar.trailingAnchor.constraint(equalTo: viewController.view.trailingAnchor)
])
return viewController
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
if let calendar = uiViewController.view.subviews.first(the place: { $0 is FSCalendar }) as? FSCalendar {
calendar.reloadData()
}
}
func makeCoordinator() -> Coordinator {
Coordinator(mum or dad: self)
}
}
o/p
Present Month Modified to: 2024-08-31 18:30:00 +0000