目前,我正在我的应用程序中构建一些基本的表单功能,并且在单击另一个TextField或在“编辑模式”下按“完成”时,TextField无法更改相关绑定变量中的值时遇到了麻烦。
@Binding var jobDetails: JobDetails
@Environment(\.colorScheme) var colorScheme: ColorScheme
...
var body: some View {
...
HStack {
Text("Hourly Rate")
Spacer()
TextField("", value: $jobDetails.hourlyRateBasic, formatter: TextFormatters().currencyFormatter())
.keyboardType(.asciiCapableNumberPad)
.multilineTextAlignment(.trailing)
...
在iOS模拟器中,仅当我在键入新值(而不是模拟器中的软键盘)之后物理上敲击键盘上的Return键时,该字段才似乎更新。我希望TextField提交,在点击另一个TextField或按“完成”退出编辑模式时,将其更改为jobDetails.hourlyRateBasic
。
当我点击另一个TextField时似乎会触发onEditingChanged
,但是我不知道如何利用它来更改具有新值的jobDetails
。
答案 0 :(得分:1)
这是SwiftUI中TextField的典型行为。以下是它的示例以及使TextField在键入时更具响应性的替代方法。
import SwiftUI
struct ContentView: View {
@State private var text: String = "0"
@State private var num: Int = 0
private var resultString: String {
if let num = Int(self.text) {
return String(num*num)
}
return "0"
}
private var resultInt: Int {
return self.num*self.num
}
var body: some View {
VStack {
VStack(alignment:.leading) {
Text("Input number as String")
TextField("String Number",text: self.$text)
.textFieldStyle(RoundedBorderTextFieldStyle())
Text("Input number as Int")
TextField("Int Number", value: self.$num, formatter: NumberFormatter())
.textFieldStyle(RoundedBorderTextFieldStyle())
}
Spacer()
Text("From String")
Text("Square of \(self.text) is \(self.resultString)") .font(.title)
Spacer()
Text("From Int")
Text("Square of \(self.num) is \(self.resultInt)") .font(.title)
Spacer()
}.padding()
}
}