I have two pickers for workoutStartTime
and workoutEndTime
that default to Date.now
but currently the user can set the end time earlier than the start time. How do you prevent this?
@State private var workoutName: String = ""
@State private var workoutStartTime: Date = Date.now
@State private var workoutEndTime: Date = Date.now
@State private var showExercieSheet = false
var body: some View {
VStack {
List {
Section(header: Text("Workout Details")) {
TextField("Enter workout name",text: $workoutName)
DatePicker("Start Time", selection: $workoutStartTime)
DatePicker("End Time", selection: $workoutEndTime)
}
}
}
}
Test the change of one date to adjust the second time if no more valid.
VStack {
...
}
.onChange(of: workoutStartTime) {
// if new start time if after end time then adjust end time
if workoutStartTime > workoutEndTime {
workoutEndTime = workoutStartTime
}
}
.onChange(of: workoutEndTime) {
// if new end time is before start time then adjust start time
if workoutEndTime < workoutStartTime {
workoutStartTime = workoutEndTime
}
}