Чтобы создать средство выбора дня рождения с помощью SwiftUI, вы можете использовать представление DatePicker, предоставляемое SwiftUI. Вот несколько методов, которые вы можете использовать, а также примеры кода:
Метод 1: использование DatePicker с привязкой к дате
import SwiftUI
struct ContentView: View {
@State private var selectedDate = Date()
var body: some View {
VStack {
DatePicker("Select your birthday", selection: $selectedDate, displayedComponents: .date)
.datePickerStyle(WheelDatePickerStyle())
.labelsHidden()
Text("Selected Date: \(selectedDate, formatter: dateFormatter)")
}
}
var dateFormatter: DateFormatter {
let formatter = DateFormatter()
formatter.dateStyle = .long
return formatter
}
}
// Usage
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Метод 2: Пользовательский DatePicker с использованием Picker
import SwiftUI
struct ContentView: View {
@State private var selectedYearIndex = 0
@State private var selectedMonthIndex = 0
@State private var selectedDayIndex = 0
let years = Array(1900...2024)
let months = Array(1...12)
let days = Array(1...31)
var body: some View {
VStack {
HStack {
Picker(selection: $selectedYearIndex, label: Text("Year")) {
ForEach(0..<years.count) { index in
Text("\(years[index])").tag(index)
}
}
.pickerStyle(WheelPickerStyle())
.frame(width: 100)
Picker(selection: $selectedMonthIndex, label: Text("Month")) {
ForEach(0..<months.count) { index in
Text("\(months[index])").tag(index)
}
}
.pickerStyle(WheelPickerStyle())
.frame(width: 100)
Picker(selection: $selectedDayIndex, label: Text("Day")) {
ForEach(0..<days.count) { index in
Text("\(days[index])").tag(index)
}
}
.pickerStyle(WheelPickerStyle())
.frame(width: 100)
}
Text("Selected Date: \(years[selectedYearIndex])-\(months[selectedMonthIndex])-\(days[selectedDayIndex])")
}
}
}
// Usage
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Метод 3. Использование специального представления DatePicker
import SwiftUI
struct BirthdayPicker: View {
@Binding var selectedDate: Date
var body: some View {
DatePicker("Select your birthday", selection: $selectedDate, displayedComponents: .date)
.datePickerStyle(WheelDatePickerStyle())
.labelsHidden()
}
}
struct ContentView: View {
@State private var selectedDate = Date()
var body: some View {
VStack {
BirthdayPicker(selectedDate: $selectedDate)
Text("Selected Date: \(selectedDate, formatter: dateFormatter)")
}
}
var dateFormatter: DateFormatter {
let formatter = DateFormatter()
formatter.dateStyle = .long
return formatter
}
}
// Usage
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}