【问题标题】:Delete a item row from list - SwiftUI从列表中删除项目行 - SwiftUI
【发布时间】:2021-08-29 12:09:58
【问题描述】:

现在在 SwiftUI 3.0 和 iOS 15 中,我们有一个 swipeActions() 方法

但是当使用 swipeActions() 时不再使用 onDelete(perform: )

我无法编写从列表中删除项目的操作代码

List{
    TextField("Create new task...", text: $newTaskText)
        .onSubmit {
            taskVM.tasks.append(Task(title: newTaskText, isCompleted: false))
            newTaskText = ""
        }
        .submitLabel(.done)
    ForEach($taskVM.tasks) { $task in
        HStack{
            Text(task.title)
            Spacer()
            Text(task.isCompleted ? "Completed ✅" : "")
                .foregroundColor(.gray)
        }
        .swipeActions(edge: .trailing) {
            Button{
                task.isCompleted.toggle()
            } label: {
                Label("Complete", systemImage: task.isCompleted ? "clear" : "checkmark")
            }
            .tint(task.isCompleted ? .red : .green)
        }
        .swipeActions(edge: .leading) {
            Button(role: .destructive){
                print("Deleted")
            } label: {
                Label("Delete", systemImage: "trash")
            }
        }
    }
 }

【问题讨论】:

    标签: swift xcode swiftui swiftui-list


    【解决方案1】:

    如果您的TaskIdentifiable(如果不值得这样做),那么您可以像这样进行删除操作

    .swipeActions(edge: .leading) {
        Button(role: .destructive){
            withAnimation {
                tasks.removeAll { task.id == $0.id }
            }
        } label: {
            Label("Delete", systemImage: "trash")
        }
    }
    

    【讨论】:

    • 有没有办法实现与使用onDelete 时触发的相同的删除动画?我打算使用多个滑动操作按钮,包括删除按钮,但是“消失的动画”没有内置的那么流畅。
    猜你喜欢
    • 2020-08-31
    • 2021-02-07
    • 2020-06-18
    • 1970-01-01
    • 2022-12-20
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    相关资源
    最近更新 更多