[英]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 中有一種方法可以做到這一點。 也許有一種方法可以訪問UITextView
的reloadInputViews()
方法? 任何幫助,將不勝感激。
您可以使用@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.