SwiftUI TextField 在点击另一个 TextField 时不会提交更改

Jam*_*ock 13 swift swiftui

我目前正在我的应用程序中构建一些基本的表单功能,当点击另一个 TextField 或在编辑模式下按“完成”时,我遇到了 TextFields 没有更改相关绑定变量中的值的问题。

    @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)
       ...
Run Code Online (Sandbox Code Playgroud)

在 iOS 模拟器中,该字段似乎仅在我输入新值(而不是模拟器中的软键盘)后物理按下键盘上的返回键时才会更新。我希望 TextFieldjobDetails.hourlyRateBasic在点击另一个 TextField 或按“完成”退出编辑模式时提交它的更改。

onEditingChanged当我点击另一个 TextField 时,似乎会触发,但我不知道如何利用它来更改jobDetails新值。

Nik*_*Jon 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这实际上回答了问题吗?我看不出这对提交数字字段的更改有什么帮助。 (6认同)