SwiftUI TextField имеет несколько конструкторов. Один из них принимает параметр Formatter.
https://developer.apple.com/documentation/swiftui/textfield
import SwiftUI
struct TextFieldFormatter: View {
@ObservedObject var model: Model = Model.shared
let formatter: NumberFormatter = {
let numFormatter = NumberFormatter()
numFormatter.numberStyle = .none
return numFormatter
}()
var body: some View {
VStack {
Text("State").onTapGesture {
self.endEditing()
}
TextField("int", value: $model.number, formatter: formatter).keyboardType(.numberPad)
Text("Echo: \(model.number)")
Text("Observable")
TextField("int", value: $model.number, formatter: formatter).keyboardType(.numberPad)
Text("Echo: \(model.number)")
}
}
}
struct TextFieldFormatter_Previews: PreviewProvider {
static var previews: some View {
TextFieldFormatter()
}
}
Также, если вы пытаетесь отключить экран с помощью onTapGesture, который вы можете рассмотреть.
добавление:
@State var disabled: Bool = false
и изменение:
Form {
Text("Disable").onTapGesture {
//self.endEditing()
self.disabled = true
}
TextField("int", value: $model.number, formatter: formatter).keyboardType(.numberPad)
Text("Echo: \(model.number)")
Text("Observable")
TextField("int", value: $model.number, formatter: formatter).keyboardType(.numberPad)
Text("Echo: \(model.number)")
}.disabled($disabled.wrappedValue)
Предоставление обратной связи, пока пользователь печатает, можно сделать несколькими различными способами, но пользовательский UITextView
в UIViewRepresentable
класс кажется наиболее распространенным.