SwiftUI-如何在列表中编辑行?

SwiftUI-如何在列表中编辑行?,swiftui,swiftui-list,Swiftui,Swiftui List,我想使用EditButton()切换编辑模式,并让我的列表行切换到编辑模式。我想在编辑模式中包含一个新按钮,用于打开模式。我甚至无法获取EditMode值来切换行内容 struct ContentView:View{ @环境(\.editMode)变量isEditMode var sampleData=[“你好”,“这是一行”,“这也是”] var body:一些观点{ 导航视图{ 列表(sampleData,id:\.self){rowValue in if(self.isEditMode?.

我想使用EditButton()切换编辑模式,并让我的列表行切换到编辑模式。我想在编辑模式中包含一个新按钮,用于打开模式。我甚至无法获取EditMode值来切换行内容

struct ContentView:View{
@环境(\.editMode)变量isEditMode
var sampleData=[“你好”,“这是一行”,“这也是”]
var body:一些观点{
导航视图{
列表(sampleData,id:\.self){rowValue in
if(self.isEditMode?.value=.active){
Text(“现在是编辑模式”)//这永远不会显示
}否则{
文本(行值)
}
}
.navigationBarTitle(文本(“编辑表格?”),显示模式:。内联)
.navigationBarItems(尾部:
编辑按钮()
)
}
}
}

您需要在列表中设置editMode的环境值:

struct ContentView:View{
@状态变量isEditMode:EditMode=.inactive
var sampleData=[“你好”,“这是一行”,“这也是”]
var body:一些观点{
导航视图{
列表(sampleData,id:\.self){rowValue in
如果(self.isEditMode==.active){
文本(“现在是编辑模式”)
}否则{
文本(行值)
}
}
.navigationBarTitle(文本(“编辑表格?”),显示模式:。内联)
.navigationBarItems(尾部:EditButton())
.environment(\.editMode,self.$isEditMode)
}
}
}

您需要小心,并确保
.environment(\.editMode,self.$isEditMode)
位于
.navigationBarItems(trailing:EditButton())
添加到@kontiki answer之后,如果您更喜欢使用布尔值作为editMode,以便更容易修改,请使用此
@State
变量:

@State var editMode: Bool = false
并将
.environment
修改器修改为:

.environment(\.editMode, .constant(self.editMode ? EditMode.active : EditMode.inactive))
现在,使用自己的按钮切换到编辑模式或从编辑模式切换到编辑模式非常简单:

Button(action: {
    self.editMode = !self.editMode
}, label: {
    Text(!self.editMode ? "Edit" : "Done")
})

我假设这种方法有效,因为editMode环境变量最初设置为绑定到状态变量,而状态变量最终也会接收EditButton对环境变量所做的更改,对吗?如果是这样的话,这是一个非常有用的工具。@ChuckH yeap,它基本上就是这样做的