【问题标题】:SwiftUI hide list item from list item viewSwiftUI 从列表项视图中隐藏列表项
【发布时间】:2019-12-31 10:29:15
【问题描述】:

所以,假设我有一个 SwiftUI 列表和切换(高度简化):

List {

    Toggle(isOn: $isOn) {

        Text("Toggle")

    }

    ForEach(arr) { item in

        if isOn || !item.isComplete {

            Row(item: item)
        }

    }

}

然后是我的行:

HStack {

    Button(action: {

        self.item.isComplete.toggle() // isComplete is a Boolean value

    }) {

        Text("Button")

    }

    Text(item.isComplete ? "Complete" : "Not complete")

}

切换应更改列表,在所有项目之间交换,并且仅在未完成的项目之间交换。这完美地工作。但是,我希望它起作用,以便当我按下按钮时,列表会立即更新并消失,而不是我必须重新切换切换。如何做到这一点?

【问题讨论】:

    标签: ios swift xcode swiftui xcode11


    【解决方案1】:

    请注意,列表在处理大量数据时仍然存在问题。在这里,您有一个可以满足您要求的示例。我传递的是 ObservableObject,但你也可以把它放在环境中。这取决于你。

    import SwiftUI
    
    struct Item: Identifiable {
        let id = UUID()
        var isComplete: Bool = false
    }
    
    class Model: ObservableObject {
        @Published var isOn: Bool = false
        @Published var arr = [Item(isComplete: true), Item(isComplete: false), Item(isComplete: true), Item(isComplete: false), Item(isComplete: true), Item(isComplete: true)]
    }
    
    struct ContentView: View {
        @ObservedObject var model = Model()
    
        var body: some View {
            List {
    
                Toggle(isOn: $model.isOn) { Text("Toggle") }
    
                ForEach(self.model.arr.filter { model.isOn ? true : $0.isComplete }) { item in
                    Row(item: item, model: self.model)
                }
            }
        }
    }
    
    struct Row: View {
        let item: Item
        @ObservedObject var model: Model
    
        var body: some View {
            HStack {
    
                Button(action: {
    
                    if let idx = self.model.arr.firstIndex(where: { $0.id == self.item.id }) {
                        self.model.arr[idx].isComplete.toggle()
                        self.model.isOn = false
                    }
    
                }) {
    
                    Text("Button")
    
                }
    
                Text(item.isComplete ? "Complete" : "Not complete")
    
            }
        }
    }
    

    【讨论】:

    • 感谢 kontiki!我会对其进行测试并回复您。
    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2015-12-24
    • 2013-07-17
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多