SwiftUI DatePicker、選択釦押されるまではBind元を反映させない
コード
DatePickerのselectionに「@Binding var day: Date」指定した場合、コール元が即座に反映されてしまう。
画面外タップでsheetをクローズ、またはキャンセル釦を追加してクローズした時に、選択が反映されてしまう。
一度選択用に「@State var selecting: Date = Date()」を用意して対応。
import SwiftUI
struct SelectDayView: View {
@Environment(\.presentationMode) var presentationMode
@Binding var day: Date
@State var selecting: Date = Date()
var body: some View {
VStack {
Text("Select Day")
.font(.largeTitle)
DatePicker("", selection: self.$selecting, displayedComponents: [.date])
.datePickerStyle(GraphicalDatePickerStyle())
.labelsHidden()
Button(action: {
self.day = self.selecting
self.presentationMode.wrappedValue.dismiss()
}, label: {
Text("Select")
.font(.largeTitle)
})
}
}
}
コール元コードExample
:
:
.sheet(isPresented: self.$onDatePicker, onDismiss: {}, content: {
SelectDayView(day: self.$day)
})
:
:





