检测用户何时点击或保存 DatePicker
Detect when user taps out of or saves on DatePicker
当用户从 DatePicker 中选择时间时,我正在尝试通过网络调用获取一些数据。
我最初使用 .onChange
进行了测试,但每次更改时都会触发,而不是在最后一次点击时触发。
DatePicker("Title", selection: $currentDate, displayedComponents: .hourAndMinute)
.onChange(of: $currentDate) { value in
print(value)
}
我也尝试过使用 didset{}
,但它也会在每次更改时触发。
@Published var currentDate: Date = Date() {
didSet { print(currentDate) }
}
我想做的是一旦用户选择了一个时间,我就触发一些功能。我不想在车轮的每个周期都这样做。
有没有办法在导入 SwiftUI 的 SwiftUI 或 UIKit 中执行此操作?
请看附件:
您可以尝试滚动自己的 DatePickerView
,例如这种方法:
struct ContentView: View {
@State private var birthdate = Date()
var body: some View {
DatePickerView(date: $birthdate)
}
}
struct DatePickerView: View {
@Binding var date: Date
@State var hasChanged = false
var body: some View {
ZStack {
Color.white.opacity(0.01).ignoresSafeArea()
.onTapGesture {
if hasChanged {
print("---> do a network call now with: \(date)")
hasChanged = false
}
}
DatePicker("Birth Date", selection: $date, displayedComponents: .hourAndMinute)
.pickerStyle(.wheel)
.onChange(of: date) { val in
hasChanged = true
}
}
}
}
当用户从 DatePicker 中选择时间时,我正在尝试通过网络调用获取一些数据。
我最初使用 .onChange
进行了测试,但每次更改时都会触发,而不是在最后一次点击时触发。
DatePicker("Title", selection: $currentDate, displayedComponents: .hourAndMinute)
.onChange(of: $currentDate) { value in
print(value)
}
我也尝试过使用 didset{}
,但它也会在每次更改时触发。
@Published var currentDate: Date = Date() {
didSet { print(currentDate) }
}
我想做的是一旦用户选择了一个时间,我就触发一些功能。我不想在车轮的每个周期都这样做。
有没有办法在导入 SwiftUI 的 SwiftUI 或 UIKit 中执行此操作?
请看附件:
您可以尝试滚动自己的 DatePickerView
,例如这种方法:
struct ContentView: View {
@State private var birthdate = Date()
var body: some View {
DatePickerView(date: $birthdate)
}
}
struct DatePickerView: View {
@Binding var date: Date
@State var hasChanged = false
var body: some View {
ZStack {
Color.white.opacity(0.01).ignoresSafeArea()
.onTapGesture {
if hasChanged {
print("---> do a network call now with: \(date)")
hasChanged = false
}
}
DatePicker("Birth Date", selection: $date, displayedComponents: .hourAndMinute)
.pickerStyle(.wheel)
.onChange(of: date) { val in
hasChanged = true
}
}
}
}