如何在EditMode和PresentationMode环境中显示表单?
示例:
当用户点击EditButton时,它将在EditMode中显示Form,并以文本文件作为输入,并更改导航标题
import SwiftUI
struct FormView: View {
var body: some View {
NavigationView {
Form {
Text("Placeholder")
// On EditMode it should show this
// TextField("Placeholder", text: Value)
}
.navigationBarTitle("Presentation Mode")
// On EditMode it should show this
// .navigationBarTitle("Edit Mode")
.navigationBarItems(trailing: EditButton())
}
}
}
struct FormView_Previews: PreviewProvider {
static var previews: some View {
FormView()
}
}
答案 0 :(得分:0)
那是获得可编辑表格的一种方式:
struct FormView: View {
@State private var isEditing = false
@State private var text = ""
var body: some View {
NavigationView {
Form {
TextField("Placeholder",
text: $text)
.disabled(!isEditing)
}
.navigationBarTitle(isEditing ? "Edit Mode" : "Presentation Mode")
.navigationBarItems(trailing: Button(isEditing ? "Save" : "Edit") {
self.isEditing.toggle()
})
}
}
}
答案 1 :(得分:0)
在这种情况下,使用editMode
环境变量时,出于某些原因EditButton()
不能单独工作。而使用自定义按钮时,editMode
可以正确切换。
有趣的是,如果将EditButton()
与自定义按钮一起添加(出于测试目的),则在使用自定义按钮至少一次切换该值一次之后,EditButton()
也会栩栩如生,提供预期的行为。
以下代码段对我来说效果很好:
import SwiftUI
struct TempView2: View {
@Environment(\.editMode) var editMode
@State var textValue : String = "abc"
var body: some View {
NavigationView {
Form {
TextField("Placeholder", text: $textValue)
.disabled(.inactive == self.editMode?.wrappedValue)
.textFieldStyle(RoundedBorderTextFieldStyle())
.foregroundColor((.active == self.editMode?.wrappedValue) ? Color.red : Color.green)
.navigationBarTitle(.inactive == self.editMode?.wrappedValue ? "Presentation Mode" : "Edit Mode")
.navigationBarItems(trailing:
HStack {
//Spacer()
//EditButton()
Spacer()
Button(action: {
self.editMode?.wrappedValue = .active == self.editMode?.wrappedValue ? .inactive : .active
}) {
Text(.active == self.editMode?.wrappedValue ? "Done" : "Edit")
}
Spacer()
})
}
}
}
}