ios - SwiftUI 从列表项 View 中隐藏列表项

标签 ios swift xcode swiftui xcode11

所以,假设我有一个 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")

}

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

最佳答案

请注意,当涉及到大量数据时,列表仍然存在问题。在这里,您有一个示例可以满足您的要求。我正在传递 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")

        }
    }
}

关于ios - SwiftUI 从列表项 View 中隐藏列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57671323/

相关文章:

iOS:核心数据异步数据获取和保存 block

ios - 如何对要添加的单元格进行排序,将其添加到先前单元格的顶部还是先前单元格的底部

swift - 为什么我使用 NSManagedObject 会得到一个基于 block 的崩溃清除 KVO?

swift - 编辑 CocoaPod 库的正确方法

ios - Xcode - Swift - iOS - 根据标题和副标题大小扩展 TableView 单元格

ios - 通过 React Native Firebase 存在 AdMob 时出现 “Linker command” 错误

iphone - 未收到 UIMoviePlayerControllerWillExitFullscreenNotification

ios - 使用 Cognito 通过 Facebook 登录后无法获取身份 ID

Swift:如何在 UIImageView 中画线?

ios - 将 UILabel 放置在倾斜或角度处