繁体   English   中英

在 SwiftUI 中重新加载 TextField 键盘

[英]Reload TextField keyboard in SwiftUI

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

struct ContentView: View {

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

  var body: some View {
    TextField("placeholder", text: $searchText).keyboardType(keyboardType)
  }
}

现在,动态地,我希望键盘从一种键盘样式更改为另一种键盘样式,具体取决于keyboardType是什么。 但是,我发现keyboardType类型发生了变化,但软键盘没有。 相反,键盘保持不变,只有在我关闭键盘并将其重新启动后,它才会显示出不同的东西。

我看到有一种方法可以包装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)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM