簡體   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