Добрый день соратники разработчики!
Столкнулся с проблемой работы TextField при использовании со значениями, отличными от текстовых.
Код выглядит так:
struct ContentView: View {
@State var floatNum: Float = 0
var body: some View {
GroupBox(label: Text("Enter value")) {
TextField("", value: $floatNum, formatter: NumberFormatter.decimal)
.textFieldStyle(RoundedBorderTextFieldStyle())
.keyboardType(.decimalPad)
Text("\(currentFloat)")
}.modifier(DismissingKeyboard())
}
}
extension NumberFormatter {
static var decimal: NumberFormatter {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return formatter
}
}
Суть проблемы: Если использовать клавиатуру по умолчанию, то нажатие кнопки Return распространяет введенное значение на связанное значение (floatNum), т. е. всё работает без проблем.
А вот у клавиатур типа decimalPad или numberPad кнопка возврата отсутствует. То есть нет штатного способа даже закрыть клавиатуру.
Для закрытия клавиатуры в коде есть модификатор DismissingKeyboard()
struct DismissingKeyboard: ViewModifier {
func body(content: Content) -> some View {
content
.onTapGesture {
let keyWindow = UIApplication.shared.connectedScenes
.filter({$0.activationState == .foregroundActive})
.map({$0 as? UIWindowScene})
.compactMap({$0})
.first?.windows
.filter({$0.isKeyWindow}).first
keyWindow?.endEditing(true)
}
}
}
Но вот функцию кнопки Return (кроме закрытия клавиатуры ещё и передать введенные цифры в связанное значение) он не выполняет.
Кто нибудь знает способ как решить эту проблему?