在SwiftUI中重新加载Textfield键盘 [英] Reload TextField keyboard in SwiftUI

查看:19
本文介绍了在SwiftUI中重新加载Textfield键盘的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试动态更改单个TextField的键盘类型。也就是说,我有这样的东西:

struct ContentView: View {

  @Binding var keyboardType: UIKeyboardType
  @State var searchText = ""

  var body: some View {
    TextField("placeholder", text: $searchText).keyboardType(keyboardType)
  }
}
现在,我希望根据keyboardType是什么,动态地将键盘从一种键盘样式更改为另一种键盘样式。然而,我发现的是keyboardType变化了,但软键盘没有变化。相反,键盘保持不变,只有在我关闭键盘并重新启动后,它才会显示一些不同的东西。

我看到有一个way to wrap UITextField,所以键盘会动态更新。但我想知道/希望在SwiftUI中有一种方法可以做到这一点。也许有办法访问UITextViewreloadInputViews()方法?如果有任何帮助,我们将不胜感激。

推荐答案

您可以使用@FocusState-禁用焦点,更换键盘,然后再次聚焦:

struct ContentView: View {
    
    @State var mykeyboard = UIKeyboardType.numberPad
    @State var searchText = ""
    
    @FocusState var focus: Bool
    
    var body: some View {
        
        VStack {
            Divider()
            HStack {
                TextField("placeholder", text: $searchText)
                    .keyboardType(mykeyboard)
                    .focused($focus)
                
                Button("Submit") {
                    focus = false
                }
            }
            Divider()
            
            HStack {
                Button("Numbers") {
                    focus = false
                    mykeyboard = .numberPad
                    focus = true
                }
                Button("EMail") {
                    focus = false
                    mykeyboard = .emailAddress
                    focus = true
                }.padding()
                Button("Alphabet") {
                    focus = false
                    mykeyboard = .alphabet
                    focus = true
                }
            }

        }
        .padding()
        .buttonStyle(.bordered)
    }
}

这篇关于在SwiftUI中重新加载Textfield键盘的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆