定义一个ViewModifier,当检测到拖动手势或者点击手势时,就会调用resignFirstResponder()方法来使TextField失去焦点。
然后,通过.dismissKeyboard()修饰符将这个功能添加到任何你想要的视图上。
struct ResignKeyboard: ViewModifier {
//滚动时取消键盘
var drag = DragGesture().onChanged { _ in
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
//点击时取消键盘
var tap = TapGesture().onEnded {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
func body(content: Content) -> some View {
content.gesture(drag).simultaneousGesture(tap)
}
}
extension View {
func dismissKeyboard() -> some View {
return modifier(ResignKeyboard())
}
}
struct FormView: View {
@State private var name = ""
var body: some View {
Form {
TextField("姓名", text: $name)
}
.dismissKeyboard()
}
}