SwiftUI实现Textfield输入键盘自动隐藏
对于输入框来说,通过限定keyboard的类型,可以设置数值型的键盘类型,比如:
TextField("输入数字", text: $keystr)
.keyboardType(UIKeyboardType.numberPad)
键盘类型如下,这个键盘,是没有完成按钮的,要隐藏这个键盘就比较麻烦。
查了很多资料,网上的例子很多,但基本上都是针对UIKit的通过viewcontroller的UITextField的delegate来实现的,对于swiftUI来说不适用。
现在给大家分享一个好用的方法:
首先在存在textfield输入框的swiftUI的页面调用如下语句,对View进
行扩展。
extension View {
func endEditing() {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
}
然后在ContentView中,按照以
下方式进行编写。
稍微解释一下:
1、通过keyboardType(UIKeyboardType.numberPad) 限定输入的内容,
有些键盘是存在完成按钮的,那就没有必要通过这个逻辑进行隐藏。
2、通过contentShape(Rectangle())和onLongPressGesture来获取viewcontainer
3、通过onTapGesture避免焦点冻结。
4、在点击空白时会自动出发endEditing事件,实现键盘隐藏。
struct ContentView: View {
@State var keystr = ""
var body: some View {
TextField("输入UN编码", text: $keystr)
.keyboardType(UIKeyboardType.numberPad)
.foregroundColor(.blue)
.contentShape(Rectangle())
.onTapGesture {}
.onLongPressGesture(
pressing: { isPressed in if isPressed { self.endEditing() } },
perform: {})
}
}
最终实现的效果是,在输入框中点击一次出现键盘,再次点击键盘隐藏。