首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SwiftUI EditButton()错误

SwiftUI EditButton()错误
EN

Stack Overflow用户
提问于 2020-10-19 03:21:57
回答 2查看 784关注 0票数 4

我在一个模式中展示了一个列表。如果我在NavigationView里面,EditButton就完全坏了。

代码语言:javascript
复制
struct ContentView: View {
@State var showSheetView = false

var body: some View {
    NavigationView {
        Button(action: {
            self.showSheetView.toggle()
        }) {
            Image(systemName: "bell.circle.fill")
                .font(Font.system(.title))
        }
        .sheet(isPresented: $showSheetView) {
            SheetView()
        }
    }
}
}

struct SheetView: View {
@State private var myArray: [String] = ["One", "Two", "Three"]
var body: some View {
    NavigationView {
        VStack {
            List {
                ForEach(myArray, id: \.self) { item in
                    Text(item)
                }.onDelete(perform: { indexSet in
                })
            }
        }
        .navigationBarItems(trailing: EditButton())
    }
}
}

如果我从我演示的地方移除NavigationView,那么一开始它似乎是工作的,第二次我演示时它又被破坏了。

代码语言:javascript
复制
struct ContentView: View {
@State var showSheetView = false

var body: some View {
        Button(action: {
            self.showSheetView.toggle()
        }) {
            Image(systemName: "bell.circle.fill")
                .font(Font.system(.title))
        }
        .sheet(isPresented: $showSheetView) {
            SheetView()
        }
}
}

EN

回答 2

Stack Overflow用户

发布于 2020-10-27 00:02:11

在使用Xcode12.1/ iOS 14.1的macOS Big Sur上,手动处理editMode对我来说很有效。

我还有一个问题,当我旋转模拟器时,EditButton在编辑模式下再次显示“编辑”,下面的解决方案也解决了这个问题。

下面的解决方案使用处理手动editMode绑定的自定义EditButton结构。首先是自定义EditButton

代码语言:javascript
复制
struct EditButton: View {
    @Binding var editMode: EditMode

    var body: some View {
        Button {
            switch editMode {
            case .active: editMode = .inactive
            case .inactive: editMode = .active
            default: break
            }
        } label: {
            if let isEditing = editMode.isEditing, isEditing {
                Text("Done")
            } else {
                Text("Edit")
            }
        }
    }
}

使用上面的EditButton很简单:

代码语言:javascript
复制
struct SheetView: View {
    @State private var myArray: [String] = ["One", "Two", "Three"]
    @State private var editMode = EditMode.inactive

    var body: some View {
        NavigationView {
            VStack {
                List {
                    ForEach(myArray, id: \.self) { item in
                        Text(item)
                    }.onDelete(perform: { indexSet in
                    })
                }
            }
            .navigationBarItems(trailing: EditButton(editMode: $editMode))
            .environment(\.editMode, $editMode)
            .animation(.spring(response: 0))
        }
    }
}

尾部导航栏项目中的EditButton处理保存在SheetView中的@State private var editMode。然后使用环境.environment(\.editMode, $editMode)将此editMode注入到内部视图中。对于编辑模式转换的动画效果,我发现.spring(response: 0)最合适。

票数 5
EN

Stack Overflow用户

发布于 2021-01-02 19:24:43

而不是

代码语言:javascript
复制
.navigationBarItems(trailing: EditButton())

您可以尝试:

代码语言:javascript
复制
.toolbar { EditButton() }

我也有同样的问题,这对我来说很好。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64417416

复制
相关文章

相似问题

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