我有一個應該同步的DatePicker。TextField
當我選擇日期中的DatePicker值更新時TextField。
當我在 value 中輸入 date 時,TextFieldvalue is updated in DatePicker,但我選擇 date inDatePicker之后TextField保持專注并且 value 沒有更新。
我讀過@FocusState但應該支持 iOS 14。
當我點擊時我怎么能說TextField失去焦點DatePicker?
import SwiftUI
import Combine
struct ContentView: View {
@State private var selectedDate = Date()
@State private var isHidden = true
let formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "MM/dd/yyyy"
return formatter
}()
var body: some SwiftUI.View {
VStack(alignment: .center) {
ZStack {
HStack(alignment: .center) {
Text("Start Date")
.frame(maxWidth: .infinity, alignment: .leading)
.background(Color.yellow)
.onTapGesture {
self.onExpandTapped()
}
Spacer()
.background(Color.yellow)
if isHidden {
Text(selectedDate, style: .date)
.onTapGesture {
self.onExpandTapped()
}
} else {
TextField("Date", value: $selectedDate, formatter: formatter)
.multilineTextAlignment(.trailing)
.background(Color.red)
.fixedSize()
}
}
}
if !isHidden {
DatePicker("",
selection: $selectedDate,
displayedComponents: .date)
.padding(.horizontal)
.frame(width: 333)
.datePickerStyle(.graphical)
.labelsHidden()
}
}
}
private func onExpandTapped() {
isHidden.toggle()
UIApplication.shared.endEditing()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
extension UIApplication {
func endEditing() {
sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
}

uj5u.com熱心網友回復:
嘗試具有副作用的可計算系結..這應該只從內部激活DataPicker:
DatePicker("",
selection: Binding(get: {selectedDate}, set:{
selectedDate = $0
UIApplication.shared.endEditing() // << here !!
}),
displayedComponents: .date)
.padding(.horizontal)
.frame(width: 333)
.datePickerStyle(.graphical)
.labelsHidden()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494669.html
