【问题标题】:Delete From List When Tapped SwiftUI点击 SwiftUI 时从列表中删除
【发布时间】:2021-04-30 12:44:05
【问题描述】:

我想在点击项目时从列表中删除项目。当我删除一个单元格时,所有其余的单元格点击指示器都显示它们也被点击了。

此外,它不会删除它,只是使其暂时不可见。当我重新加载页面时,已删除的单元格再次出现在内存中并且再次可见。

List{
                ForEach(list.reminders, id: \.self) { reminder in
                    Button(action: {
                        self.isSelected.toggle()
                        self.delete(at: list.reminders.firstIndex(where: {$0.hashValue == reminder.hashValue})!)
                    }, label: {
                        HStack{
                            Image(systemName: isSelected ? "largecircle.fill.circle" : "circle")
                                .resizable()
                                .aspectRatio(contentMode: .fit)
                                .foregroundColor((isSelected ? Color(list.color) : .gray))
                                .frame(width: 22, height: 22, alignment: .trailing)
                                .cornerRadius(22)
                            ReminderCell(reminder: reminder)
                        }
                    })
                    .padding(.bottom)
                }.onDelete(perform: deleteReminder)
            }

func deleteReminder(at offsets: IndexSet) {
    list.reminders.remove(atOffsets: offsets)
}
func delete(at index: Int) {
    list.reminders.remove(at: index)
}

【问题讨论】:

    标签: ios swift swiftui


    【解决方案1】:

    首先,如果你想让.onTapGesture {} 中的功能起作用,你必须把它放在Button标签之外,因为当你点击它时,会触发Button动作中的功能。

    其次,如果要获取 ForEach 中元素的索引,则必须添加indices。在下面检查我的代码,因为你没有完全发布你的代码,我无法准确地测试我的代码。

            List {
                ForEach(list.reminders.indices, id: \.self) { index in
                    HStack {
                        Button(action: {
                            self.isSelected.toggle()
                        }, label: {
                            Image(systemName: isSelected ? "largecircle.fill.circle" : "circle")
                                .resizable()
                                .aspectRatio(contentMode: .fit)
                                .foregroundColor((isSelected ? Color(list.color) : .gray))
                                .frame(width: 22, height: 22, alignment: .trailing)
                                .cornerRadius(22)
                        })
                        Button(action: {
                            deleteReminder(at: IndexSet(integer: index))
                        }) {
                            ReminderCell(reminder: list.reminders[index])
                        }
                    }
                    .padding(.bottom)
                }.onDelete(perform: deleteReminder)
            }
    
    

    【讨论】:

    • 我试过了。点击时不会删除
    • 我建议你在另一个按钮标签中添加ReminderCell,并且动作是删除功能,在你当前的按钮之外。我已经用一些数据进行了测试,它有效
    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2021-10-28
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多