【问题标题】:How to check EditButton/EditMode state in SwiftUI如何在 SwiftUI 中检查 EditButton/EditMode 状态
【发布时间】:2021-09-07 07:24:50
【问题描述】:

我有以下测试代码。但是当点击编辑按钮时,文本不会改变。我找不到任何相关信息。如何检查/控制editButton/editMode状态变化?

struct TestView: View {
    @State private var list = [1,2,3,4,5]
    @State private var selection = Set<Int>()
    @Environment(\.editMode) var mode
    
    var body: some View {
        NavigationView {
            List(selection: $selection) {
                ForEach(list, id: \.self) { item in
                    Text("\(item)")
                }
            }
            .toolbar {
                ToolbarItem(placement: .navigationBarLeading) {
                    EditButton()
                }
                ToolbarItem(placement: .navigationBarTrailing) {
                    if mode?.wrappedValue.isEditing ?? false {
                        Text("Editing")
                    } else {
                        Text("Not Editing")
                    }
                }
            }
        }  
    }
}

【问题讨论】:

    标签: swift swiftui environment-variables editmode


    【解决方案1】:

    您可以通过将.environment 设置为@State 模式来实现。

    struct TestView: View {
        @State private var list = [1,2,3,4,5]
        @State private var selection = Set<Int>()
        @State var mode: EditMode = .inactive //< -- Here
        
        var body: some View {
            NavigationView {
                List(selection: $selection) {
                    ForEach(list, id: \.self) { item in
                        Text("\(item)")
                    }
                }
                
                .toolbar {
                    ToolbarItem(placement: .navigationBarLeading) {
                        EditButton()
                    }
                    ToolbarItem(placement: .navigationBarTrailing) {
                        Text(mode == .active ? "Editing" : "Not Editing")
                    }
                }.environment(\.editMode, $mode) //< -- Here
            }
        }
    }
    

    【讨论】:

    • 这行得通,谢谢。我也可以使用 @Environment(\.editMode) var editMode: Binding 在另一个视图上的 TestView 中定义的 editMode 属性
    • @KenanNur 不确定。但也许是的
    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 2021-02-01
    • 2019-12-12
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 2019-12-28
    • 2021-09-18
    相关资源
    最近更新 更多