DeadSimpleCalendar

Package provides a CalendarView which can be used to display simple calendar in your App.

You’d have to pass getEventsNumber and perform functions which will be used to:

  • getEventsNumbers(Date?) – will be called for each date cell for currently displaying month
  • perform(Date) – will be called on tap of date cell
  • monthChanged(Int) – will be changed when month is scrolled (i.e. changed)

Calendar gets events only for selected month – so if your view model depends on month, use monthChanged to update data

Usage

import DeadSimpleCalendar

// makeMockData() creates random number of events through provided year -> 2021
// number of events for day will change highlighting of cell
let mockEvents = DeadSimpleCalendar.makeMockData()
    
struct YourDeadSimpleCalendarView: View {
    
    
    // selected date (when user taps on date)
    @State private var selectedDate: Date = Date()
    
    // selected month index (0 -> Jan, 11 -> Dec)
    @State private var selectedMonth: Int = 0
    
    var body: some View {
        VStack{
            CalendarView(
                getEventsNumber: { date in
                    guard date != nil else { return 0 }

                    if let item = mockEvents[date!] {
                        return item
                    }
                    
                    return 0
                },
                perform: { d in
                    selectedDate = d
                },
                monthChanged: { month in
                    // can be used to update viewModel to query data for selected month
                    selectedMonth = month
                }
            )
            VStack(spacing: 5){
                Text("Selected month index: \(selectedMonth)")
                Text("Selected date: \(selectedDate.ISO8601Format())")
            }.padding()
            Spacer()
        }
    }
}
struct YourDeadSimpleCalendarView_Previews: PreviewProvider {
    static var previews: some View {
        YourDeadSimpleCalendarView()
    }
}

Demo

DeadSimpleCalendar Demo

GitHub

View Github