< How to open web links in Safari | How to hide the label of a Picker, Stepper, Toggle, and more using labelsHidden() > |
Updated for Xcode 14.2
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 project
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 project
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 project
SPONSORED Thorough mobile testing hasn’t been efficient testing. With Waldo Sessions, it can be! Test early, test often, test directly in your browser and share the replay with your team.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.