Ресурсы: Работа с 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 для отображения списка подлежащих оплате счетов.