我有一个SwiftUI列表/详细信息应用程序,其中有许多数据字段,除了 当然是数据。我正在尝试提取视图,但似乎无法获取 连接正确。
数据在核心数据中,且注释的实体为患者。我将病历传递给 详细视图。当为每个数据字段重复代码时,一切正常。
虽然我认为问题不在于自定义修饰符,但为清楚起见,我将其包括在内 用于添加清除按钮的自定义修饰符的代码。奇怪的是,我不能 找到一个内置的SwiftUI TextField清除按钮。
以下是单个数据元素的相关代码-可行:
var patient: Patient
@State private var updatedTitle: String = "No Title"
//title
VStack(alignment: .leading) {
Text("Person Title:")
.padding(.leading, 5)
.font(.headline)
HStack {
TextField("Enter a Title", text: $updatedTitle)
.frame(minWidth: 0, maxWidth: .infinity)
.padding(.trailing, -25)
.padding(.leading, 5)
.frame(height: 45)
.onAppear {
self.updatedTitle = self.patient.title ?? ""
}
Text("")
.frame(width: 35, height: 35)
.modifier(ClearButton(text: self.$updatedTitle))
.padding(.trailing, 15)
.padding(.leading, -20)
}
.background(Color("TextFieldBackground")).cornerRadius(8)
.overlay(
RoundedRectangle(cornerRadius: 8)
.stroke(Color.gray, lineWidth: 1)
)
.padding(.leading, 10)
.padding(.trailing, 10)
}.padding(10)
这是我提取子视图的尝试:
struct MyDataCell {
@Binding var tfData: String
var passedInLabel: String
var patient: Patient
var body: some View {
VStack(alignment: .leading) {
Text(passedInLabel)
.padding(.leading, 5)
.font(.headline)
HStack {
TextField("Enter a Title", text: $tfData)
.frame(minWidth: 0, maxWidth: .infinity)
.padding(.trailing, -25)
.padding(.leading, 5)
.frame(height: 45)
.onAppear {
self.tfData = self.patient.title ?? ""
}
Text("")
.frame(width: 35, height: 35)
.modifier(ClearButton(text: $tfData))
.padding(.trailing, 15)
.padding(.leading, -20)
}
.background(Color("TextFieldBackground")).cornerRadius(8)
.overlay(
RoundedRectangle(cornerRadius: 8)
.stroke(Color.gray, lineWidth: 1)
)
.padding(.leading, 10)
.padding(.trailing, 10)
}.padding(10)
}
}
这是我用来调用子视图的代码行-编译器立即抱怨 与该行无关的错误。
MyDataCell(tfData: $updatedTitle, passedInLabel: "Patient Title", patient: patient)
如上所述,这是自定义修饰符的代码:
struct ClearButton: ViewModifier {
@Binding var text: String
public func body(content: Content) -> some View {
HStack {
content
Button(action: {
self.text = ""
}) {
Image(systemName: "multiply.circle.fill")
.foregroundColor(.secondary)
}
}
}
}
Xcode版本11.2 beta 2(11B44)我已经尝试了模拟器和设备。任何 指导将不胜感激。
答案 0 :(得分:0)
MyDataCell需要确认才能查看-结构MyDataCell:View {
需要传入的属性是实体的实际属性。在这种情况下,请传递Patient.title字符串,而不要传递Entity,Patient。然后在.onAppear中使用该字符串。
最后,记住每个视图最多10个项目-将列表分成几组。