ios – FSCalendarView Calendar swiping months challenge in swiftui

0
24
ios – FSCalendarView Calendar swiping months challenge in swiftui


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

LEAVE A REPLY

Please enter your comment!
Please enter your name here