Единственное, что я нашел до сих пор, чтобы закрыть клавиатуру, это позвонить endEditing(_:)
на keyWindow
:
struct ContentView : View {
@State private var name: String = ""
var body: some View {
VStack {
Text("Hello \(name)")
TextField($name, placeholder: Text("Name...")) {
// Called when the user tap the return button
// see `onCommit` on TextField initializer.
UIApplication.shared.keyWindow?.endEditing(true)
}
}
}
}
Если вы хотите закрыть клавиатуру касанием, вы можете создать полноэкранный белый вид с действием касания, которое вызовет endEditing(_:)
:
struct Background<Content: View>: View {
private var content: Content
init(@ViewBuilder content: @escaping () -> Content) {
self.content = content()
}
var body: some View {
Color.white
.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
.overlay(content)
}
}
struct ContentView : View {
@State private var name: String = ""
var body: some View {
Background {
VStack {
Text("Hello \(self.name)")
TextField(self.$name, placeholder: Text("Name...")) {
self.endEditing(true)
}
}
}.tapAction {
self.endEditing(true)
}
}
private func endEditing(_ force: Bool) {
UIApplication.shared.keyWindow?.endEditing(force)
}
}