问题描述
DatePicker("DATE & TIME",selection: Binding(get: {
self.dateTime
},set: { newValue in
self.dateTime = newValue
if newValue > Date() {
sendDateTimetoServer()
}
}),displayedComponents: [.date,.hourAndMinute])
与每次 dateTime 更改时调用 sendDateTimetoServer() 相反,我想等到全屏(第二张图像)DatePicker 折叠,是否有事件?也欢迎其他建议!
谢谢,
解决方法
更新 属性观察者 didSet 提供了在弹出窗口被解除时做一些工作的机会。试试这个:
struct UpdateOnDismissView: View {
@EnvironmentObject var context : LaunchContext
var body: some View {
VStack {
Text("\(context.launch)").padding()
Button("Set Launch Date",action: { context.show.toggle() })
.padding()
.popover(isPresented: $context.show,content: { panel })
}
}
var panel : some View {
VStack {
Button("Done",action: { context.show.toggle() })
DatePicker("Launch",selection: Binding(get: {
context.launch
},set: { newValue in
context.launch = newValue
}),displayedComponents: [.date,.hourAndMinute])
}
.padding()
.onDisappear(perform: {
print("Popover disappearing")
})
}
}
struct UpdateOnDismissView_Previews: PreviewProvider {
static var previews: some View {
UpdateOnDismissView().environmentObject(LaunchContext())
}
}
class LaunchContext : ObservableObject {
@Published var launch : Date = Date()
@Published var show : Bool = false { didSet {
if !show && launch < Date() {
sendLaunchToServer()
} else {
print("Dismissed")
}
}}
func sendLaunchToServer() {
print("Sending date \(launch)")
}
}