SwiftUI实现Textfield输入键盘自动隐藏

Posted swifts

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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: {})


}

}



最终实现的效果是,在输入框中点击一次出现键盘,再次点击键盘隐藏。

以上是关于SwiftUI实现Textfield输入键盘自动隐藏的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerView 作为 SwiftUI 中 TextField() 的输入

iOS 14 SwiftUI 键盘自动提升视图

键盘出现/消失时调整带有 TextField 的 SwiftUI 列表

长按键盘时 TextField 显示 -[UIWindow endDisablingInterfaceAutorotationAnimated:] 错误 (SwiftUI)

如何滚动滚动视图以使 TextField 在 SwiftUI 中移动到键盘上方?

SwiftUI 键盘弹出一次输入并不断出现和消失