Ресурсы: Работа с FSCalendar

Я использую календарь для своего приложения Bill Reminder, чтобы пользователи могли просматривать счета за день.

Я использую два файла; CalendarView и CalendarViewRepresentation.

CalendarView — это представление SwiftUI, которое будет отображать CalendarViewRepresentation,UIView.

Я использую пакет Swift под названием FSCalendar для управления функциями календаря.

CalendarViewRepresentation

Создание UIView должно соответствовать протоколу UIViewRepresentation. presentModal и billsInDay передаются, когда мы вызываем этот класс из представления SwiftUI. Я извлекаю счета из основных данных, чтобы использовать их позже.

Мне нужно три метода, чтобы сделать эту работу; makeUIView, updateUIView и makeCoordinator.

makeUIView -> вернет календарь и установит делегата и источник данных.

updateUIView -> будет что-то делать при обновлении пользовательского интерфейса.

makeCoordinator -› установить координатора UIViewRepresentable.

makeUIView

Я настраиваю внешний вид и задаю delegate и dataSource координатору из UIViewRepresentable.

обновлениеUIView

Я перезагружаю данные в календаре. Чтобы отразить изменения

управляет функциями календаря и связывается с представлением SwiftUI

makeCoordinator

Задайте для координатора UIViewRepresentable класс Coordinator (см. ниже).

Координатор

управляет функциями календаря и взаимодействует с представлением SwiftUI.

Он соответствует протоколам FSCalendarDelegate и FSCalendarDataSource.

Четыре метода, которые я использую, чтобы мой календарь работал должным образом.

  • didSelect
  • numberOfEvents
  • maximumDate
  • minimumDate

didSelect (когда выбрана дата)

Я открываю модальное окно и фильтрую bills, чтобы найти счета, подлежащие оплате в выбранную дату. Я установил результаты billsInDay для использования в SwiftUI.

numberOfEvents (подсчитывает, сколько точек отображается за день)

В зависимости от того, сколько счетов нужно оплатить в день, я увеличиваю количество отображаемых точек. Пример: 3 счета 20 ноября, 3 точки будут показаны ниже дня. Указание на 3 события (счета) на этот день.

maxDate (ограничить диапазон календаря)

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

MinimumDate (ограничить диапазон календаря)

Я установил его на Date.now, что означает, что я не вижу счетов за прошлые периоды, только настоящие и последующие.

КалендарьПросмотр

presentModal отображает всплывающий лист, billsInDay заполняется в CalendarViewRepresentable и отправляется обратно в SwiftUI. Затем он будет передан в BillPopupSheet для отображения списка подлежащих оплате счетов.

BillPopupSheet

Конечный результат просмотра календаря