簡體   English   中英

SwiftUI 更改每個文本字段的鍵盤類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM