首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TabView中无法识别editMode更改

TabView中无法识别editMode更改
EN

Stack Overflow用户
提问于 2020-12-27 06:23:02
回答 3查看 82关注 0票数 1

当不在TabView中时,这段代码可以很好地工作。一旦将其放入TabView中,.editMode更改似乎不会对List产生任何影响。

代码语言:javascript
复制
struct ContentView: View {
    @Environment(\.editMode) var editMode
    var body: some View {
        TabView {
            myView().tabItem {
             Text("test")
            }.tag(0)
        }
    }
}
struct myView : View {
    @State var list = ["a", "b", "c"]
    @Environment(\.editMode) var editMode

    var body: some View {
        VStack {
            Button(action: {
                if self.editMode?.wrappedValue == .active {
                    self.editMode?.wrappedValue = .inactive
                } else {
                    self.editMode?.wrappedValue = .active
                }
            }, label: {
                Text("Edit")
            })
            List {
                ForEach(list, id:\.self) {val in
                    Text(val)
                }.onDelete(perform: { indexSet in
                    ()
                })
            }
        }
    }
}

不确定这是否是错误,或者在TabView中的.editMode是否有某种不同。

EN

回答 3

Stack Overflow用户

发布于 2020-12-27 06:39:17

您可以显式地将editMode

代码语言:javascript
复制
struct myView: View {
    @State var list = ["a", "b", "c"]
    @Environment(\.editMode) var editMode

    var body: some View {
        VStack {
            Button(action: {
                if self.editMode?.wrappedValue == .active {
                    self.editMode?.wrappedValue = .inactive
                } else {
                    self.editMode?.wrappedValue = .active
                }
            }, label: {
                Text("Edit")
            })
            List {
                ForEach(list, id: \.self) { val in
                    Text(val)
                }.onDelete(perform: { indexSet in
                    ()
                })
            }
            .environment(\.editMode, editMode) // <- inject here
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2020-12-27 06:48:02

您可以通过添加EditButton来切换列表视图的编辑模式

代码语言:javascript
复制
struct ContentView: View {
   @State var list = ["a", "b", "c"]

   var body: some View {
      NavigationView {
          List {
              ForEach(list, id: \.self) { value in
                  Text(value)
              }
              .onDelete(perform: delete)
          }
          .navigationBarItems(trailing: EditButton())
      }
  }

  func delete(at offsets: IndexSet) {
     list.remove(atOffsets: offsets)
  }
}
票数 1
EN

Stack Overflow用户

发布于 2020-12-27 06:35:54

尝试使用EditButton()而不是创建普通的Button

这对我很有效:

代码语言:javascript
复制
VStack {
  EditButton()
  List {
   ForEach(list, id:\.self) {val in
     Text(val)
   }.onDelete(perform: { indexSet in
     ()
   })
  }
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65461226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档