SwiftUI - 如何在列表中编辑行?
SwiftUI - How do I make edit rows in a list?
我想使用 EditButton() 来切换编辑模式,并让我的列表行切换到编辑模式。我想在编辑模式下包含一个新按钮以打开模式。我什至无法获得 EditMode 值来切换行内容。
struct ContentView: View {
@Environment(\.editMode) var isEditMode
var sampleData = ["Hello", "This is a row", "So is this"]
var body: some View {
NavigationView {
List(sampleData, id: \.self) { rowValue in
if (self.isEditMode?.value == .active) {
Text("now is edit mode") // this is never displayed
} else {
Text(rowValue)
}
}
.navigationBarTitle(Text("Edit A Table?"), displayMode: .inline)
.navigationBarItems(trailing:
EditButton()
)
}
}
}
您需要在列表中设置editMode的环境值:
struct ContentView: View {
@State var isEditMode: EditMode = .inactive
var sampleData = ["Hello", "This is a row", "So is this"]
var body: some View {
NavigationView {
List(sampleData, id: \.self) { rowValue in
if (self.isEditMode == .active) {
Text("now is edit mode")
} else {
Text(rowValue)
}
}
.navigationBarTitle(Text("Edit A Table?"), displayMode: .inline)
.navigationBarItems(trailing: EditButton())
.environment(\.editMode, self.$isEditMode)
}
}
}
你需要小心,确保 .environment(\.editMode, self.$isEditMode)
在 .navigationBarItems(trailing: EditButton())
之后。
添加到@kontiki 答案中,如果您更喜欢为 editMode 使用布尔值以便更容易修改,请使用此 @State
变量:
@State var editMode: Bool = false
并将.environment
修饰符修改为:
.environment(\.editMode, .constant(self.editMode ? EditMode.active : EditMode.inactive))
现在使用您自己的按钮切换 to/from 编辑模式非常简单:
Button(action: {
self.editMode = !self.editMode
}, label: {
Text(!self.editMode ? "Edit" : "Done")
})
我想使用 EditButton() 来切换编辑模式,并让我的列表行切换到编辑模式。我想在编辑模式下包含一个新按钮以打开模式。我什至无法获得 EditMode 值来切换行内容。
struct ContentView: View {
@Environment(\.editMode) var isEditMode
var sampleData = ["Hello", "This is a row", "So is this"]
var body: some View {
NavigationView {
List(sampleData, id: \.self) { rowValue in
if (self.isEditMode?.value == .active) {
Text("now is edit mode") // this is never displayed
} else {
Text(rowValue)
}
}
.navigationBarTitle(Text("Edit A Table?"), displayMode: .inline)
.navigationBarItems(trailing:
EditButton()
)
}
}
}
您需要在列表中设置editMode的环境值:
struct ContentView: View {
@State var isEditMode: EditMode = .inactive
var sampleData = ["Hello", "This is a row", "So is this"]
var body: some View {
NavigationView {
List(sampleData, id: \.self) { rowValue in
if (self.isEditMode == .active) {
Text("now is edit mode")
} else {
Text(rowValue)
}
}
.navigationBarTitle(Text("Edit A Table?"), displayMode: .inline)
.navigationBarItems(trailing: EditButton())
.environment(\.editMode, self.$isEditMode)
}
}
}
你需要小心,确保 .environment(\.editMode, self.$isEditMode)
在 .navigationBarItems(trailing: EditButton())
之后。
添加到@kontiki 答案中,如果您更喜欢为 editMode 使用布尔值以便更容易修改,请使用此 @State
变量:
@State var editMode: Bool = false
并将.environment
修饰符修改为:
.environment(\.editMode, .constant(self.editMode ? EditMode.active : EditMode.inactive))
现在使用您自己的按钮切换 to/from 编辑模式非常简单:
Button(action: {
self.editMode = !self.editMode
}, label: {
Text(!self.editMode ? "Edit" : "Done")
})