Я пытаюсь обновить числовое поле, поэтому я использую TextField с набором параметров formatter :. Он отлично форматирует число в поле ввода, но не изменяет связанное значение при редактировании. TextField работает нормально (на строках) без указанного форматера. Это ошибка или я что-то упустил?
ОБНОВЛЕНИЕ: Начиная с Xcode 11 beta 3, это вроде работает. Теперь, если вы редактируете числовое TextField, значение привязки обновляется после нажатия клавиши return. String TextField по-прежнему обновляется после каждого нажатия клавиши. Я предполагаю, что они не хотят отправлять значение для форматирования в средство форматирования при каждом нажатии клавиши, или, может быть, есть/будет модификатор для TextField, который скажет ему сделать это.
Обратите внимание, что API немного изменился; старые initF) TextField устарели, и новое поле titleKey String было добавлено в качестве первого параметра, который появляется в качестве текста-заполнителя в поле.
struct TestView : View {
@State var someText = "Change me!"
@State var someNumber = 123.0
var body: some View {
Form {
// Xcode 11 beta 2
// TextField($someText)
// TextField($someNumber, formatter: NumberFormatter())
// Xcode 11 beta 3
TextField("Text", text: $someText)
TextField("Number", value: $someNumber, formatter: NumberFormatter())
Spacer()
// if you change the first TextField value, the change shows up here
// if you change the second (the number),
// it does not *until you hit return*
Text("text: \(self.someText), number: \(self.someNumber)")
// the button does the same, but logs to the console
Button(action: { print("text: \(self.someText), number: \(self.someNumber)")}) {
Text("Log Values")
}
}
}
}
Если вы введете первый (String) TextField, значение в текстовом представлении будет обновлено немедленно. Если вы редактируете второй (Числовой), ничего не происходит. Аналогично нажатие кнопки показывает обновленное значение для строки, но не число. Я только попробовал это в симуляторе.