[英]SwiftUI Changing KeyboardType Per TextField
我有多個 TextFields,對於其中一個,我需要將 keyboardType 切換為 .numberPad。 顯然,使用 .keyboardType(.numberPad) 修飾符真的很容易,但問題是當默認鍵盤已經顯示時,它不會關閉然后調出 numberPad。 相反,它只是立即切換,這導致用戶必須手動向上滑動才能看到他們將在其中輸入數字的 TextField。
我需要做的是完全關閉默認鍵盤,然后顯示 numberPad,以便將正確的 TextField 推到屏幕上。
我已經為 numberField TextField 嘗試了各種修飾符,例如:
.onAppear {
isFocused = nil
isFocused = .numberField
}
.onAppear {
isFocused = nil
sleep(1)
isFocused = .numberField
}
.focused($isFocused, equals: nil)
.keyboardType(.numberPad)
.focused($isFocused, equals: .numberField)
沒有工作。 鍵盤切換,但屏幕沒有滾動到正確的字段。
由於這是一個多字段表單,我使用提交按鈕在字段之間切換,如下所示:
TextField("", text: $field1)
.focused($isFocused, equals: .field1)
.keyboardType(.default)
.onSubmit {
if isFocused == .field1 {
isFocused = .numberField
}
}
.submitLabel(.next)
TextField("", text: $numberField)
.focused($isFocused, equals: .numberField)
.keyboardType(.numberPad)
如果我手動關閉 field1 的默認鍵盤,然后點擊 numberField TextField,numberPad 出現並且該字段正確聚焦。 因此,我需要以某種方式自動關閉默認鍵盤,然后顯示 numberPad,以便將正確的字段集中在用戶的屏幕上。
為了關閉現有鍵盤然后顯示新類型的鍵盤,同時保持鍵盤避免並專注於正確的 TextField,您需要按如下方式使用 DispatchQueue:
TextField("", text: $field1)
.focused($isFocused, equals: .field1)
.keyboardType(.default)
.onSubmit {
if isFocused == .field1 {
isFocused = nil
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
isFocused = .numberField
}
}
}
通過使用 DispatchQueue,您可以讓應用程序繼續運行,同時完全關閉鍵盤,等待 x 秒(在我的示例中是 0.3 秒,感覺非常瞬間),然后調出新鍵盤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.