Core data SwiftUI表单仅更新“上的属性”;输入“;
我有一个表单,用户可以输入几个值来跟踪费用。 但是,只有当用户点击Core data SwiftUI表单仅更新“上的属性”;输入“;,core-data,swiftui,Core Data,Swiftui,我有一个表单,用户可以输入几个值来跟踪费用。 但是,只有当用户点击Enter时,这些值才会存储在属性中。如果添加了这些值,并且用户选择了下一个字段,则先前输入的属性的值保持为初始值 是否需要设置任何内容以接受字段的正常更改 谢谢 import SwiftUI import CoreData struct CreateEditChargeView: View { @Environment(\.managedObjectContext) private var viewContext
Enter
时,这些值才会存储在属性中。如果添加了这些值,并且用户选择了下一个字段,则先前输入的属性的值保持为初始值
是否需要设置任何内容以接受字段的正常更改
谢谢
import SwiftUI
import CoreData
struct CreateEditChargeView: View {
@Environment(\.managedObjectContext) private var viewContext
@Environment(\.presentationMode) var presentation
private var isNew = true
@ObservedObject var charge:Charge = Charge(entity: Charge.entity(), insertInto: nil)
var selectedVehicle: Vehicle
init(selectedVehicle: Vehicle, charge: Charge? = nil) {
self.selectedVehicle = selectedVehicle
if let charge = charge {
isNew = false
self.charge = charge
} else {
self.charge.id = UUID()
}
}
@ViewBuilder
var body: some View {
Form {
Section(header: Text("Basic")) {
TextField("KM", value: $charge.odometer,formatter: Formatter.distanceFormatter)
TextField("Price per Unit", value: $charge.pricePerUnit, formatter: Formatter.currencyFormatter)
}
}.navigationBarItems(leading: VStack{
if presentation.wrappedValue.isPresented {
Button(action: {
presentation.wrappedValue.dismiss()
}) {
Text("Cancel")
}
}
}, trailing: VStack {
if presentation.wrappedValue.isPresented {
Button(action: {
if isNew {
viewContext.insert(charge)
charge.vehicle = selectedVehicle
}
do {
try viewContext.save()
} catch {
ErrorHandler.handleError(error: error)
}
presentation.wrappedValue.dismiss()
}) {
Text("Done")
}
}
})
}
}
这是通过格式化程序的
TextField
的设计行为实现的。如果它不符合你的需要,我建议考虑类似的方法。非常感谢。我不知道。