我成功地在SwifUI中创建了UIDatePicker,但是当我在选择器中更改日期轮时,日期值未更新,这是我的代码:
struct DatePicker: UIViewRepresentable {
@Binding var date: Date
func makeUIView(context: Context) -> UIDatePicker {
let view = UIDatePicker()
view.datePickerMode = .date
return view
}
func updateUIView(_ uiView: UIDatePicker, context: Context) {
uiView.date = date
}
}
然后我从这样的视图中调用它:
struct SwiftUIView: View {
@State var date = Date()
var body: some View {
DatePicker(date: self.$date)
}
}
struct DatePicker: UIViewRepresentable {
@Binding var date: Date
private let datePicker = UIDatePicker()
func makeUIView(context: Context) -> UIDatePicker {
datePicker.datePickerMode = .date
datePicker.addTarget(context.coordinator, action: #selector(Coordinator.changed(_:)), for: .valueChanged)
return datePicker
}
func updateUIView(_ uiView: UIDatePicker, context: Context) {
datePicker.date = date
}
func makeCoordinator() -> DatePicker.Coordinator {
Coordinator(date: $date)
}
class Coordinator: NSObject {
private let date: Binding<Date>
init(date: Binding<Date>) {
self.date = date
}
@objc func changed(_ sender: UIDatePicker) {
self.date.wrappedValue = sender.date
}
}
}