Skip to main content

How to let the user select multiple dates

About 2 minSwiftSwiftUIArticle(s)bloghackingwithswift.comcrashcourseswiftswiftuixcodeappstore

How to let the user select multiple dates 관련

SwiftUI by Example

Back to Home

How to let the user select multiple dates | SwiftUI by Example

How to let the user select multiple dates

Updated for Xcode 15

New in iOS 16

SwiftUI's MultiDatePicker shows a calendar view where the user is able to select a variety of dates at the same time, either from any possible date or from a date range of your choosing.

In its simplest form, you just need some sort of state to track which dates they have chosen, then bind that to your picker:

struct ContentView: View {
    @State var dates: Set<DateComponents> = []

    var body: some View {
        MultiDatePicker("Select your preferred dates", selection: $dates)
    }
}

Download this as an Xcode projectopen in new window

However, chances are you're going to want to convert those date components to real dates, in which case you'll want to read the user's calendar from the environment and convert the data as needed:

struct ContentView: View {
    @Environment(\.calendar) var calendar
    @State var dates: Set<DateComponents> = []

    var body: some View {
        VStack {
            MultiDatePicker("Select your preferred dates", selection: $dates)

            Text(summary)
        }
        .padding()
    }

    var summary: String {
        dates.compactMap { components in
            calendar.date(from: components)?.formatted(date: .long, time: .omitted)
        }.formatted()
    }
}

Download this as an Xcode projectopen in new window

By default, the user is able to choose any dates they like, but you can also restrict their selection to a range of your choosing. For example, this code allows them to select any date from today onwards, but nothing earlier:

struct ContentView: View {
    @Environment(\.calendar) var calendar
    @State var dates: Set<DateComponents> = []

    var body: some View {
        VStack {
            MultiDatePicker("Select your preferred dates", selection: $dates, in: Date.now...)

            Text(summary)
        }
        .padding()
    }

    var summary: String {
        dates.compactMap { components in
            calendar.date(from: components)?.formatted(date: .long, time: .omitted)
        }.formatted()
    }
}

Download this as an Xcode projectopen in new window

Similar solutions…
How to let users select pictures using PhotosPicker | SwiftUI by Example

How to let users select pictures using PhotosPicker
How to let users select text | SwiftUI by Example

How to let users select text
How to let users select a color with ColorPicker | SwiftUI by Example

How to let users select a color with ColorPicker
How to format dates inside text views | SwiftUI by Example

How to format dates inside text views
How to let the user paste data into your app | SwiftUI by Example

How to let the user paste data into your app

이찬희 (MarkiiimarK)
Never Stop Learning.