Существуют ли простые средства для отмены клавиатуры или любого другого активного элемента управления, когда становится активным другой элемент управления, например средство выбора даты? Или наоборот.
Существуют некоторые решения для отклонения клавиатуры, но также запрещающие использование средства выбора.
Возможно, существует событие, отличное от onTapGesture, для использования.
Ниже приведен пример кода, иллюстрирующий проблему.
struct TestView: View {
@State private var firstname = ""
@State private var surname = ""
@State private var birthdate = Date()
@State private var activeField: Int = 0
var body: some View {
Form {
Section{
TextField("Firstname", text: self.$firstname)
TextField("Surname", text: self.$surname)
TextField("Surname", text: self.$surname, onEditingChanged: { (editingChanged) in
if editingChanged {
print("TextField focused")
} else {
print("TextField focus removed")
self.endEditing()
}
})
}
Section(header: Text("Time: ")){
DatePicker(selection: self.$birthdate, in: ...Date(), displayedComponents: .date) {
Text("Date of Birth")
}
.onTapGesture {
self.endEditing()
}
DatePicker(selection: self.$birthdate, in: ...Date(), displayedComponents: .hourAndMinute) {
Text("Date of Birth")
}
}
}
}
func endEditing() {
//UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
let keyWindow = UIApplication.shared.connectedScenes
.filter({$0.activationState == .foregroundActive})
.map({$0 as? UIWindowScene})
.compactMap({$0})
.first?.windows
.filter({$0.isKeyWindow}).first
keyWindow?.endEditing(true)
}
}