当前位置: 首页 > 知识库问答 >
问题:

点击SwiftUI时从列表中删除

耿弘阔
2023-03-14

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

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

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)
}

共有1个答案

宰坚
2023-03-14

首先,如果你想让.ontapgesture{}中的函数起作用,你得把它放在按钮标签外面,因为当你点击它时,按钮动作中的函数就会被触发。

其次,如果要获得ForEach中元素的索引,必须添加indexs。在下面检查我的代码,因为你没有完全贴出你的代码,所以我不能确切地测试我的代码。

        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)
        }

 类似资料:
  • 问题内容: 我有一个类似的清单 这应该变成 我只想删除标点符号,使字母和数字保持原样。标点是常数。我知道这很简单,但是我有点喜欢python所以… 谢谢,giodamelio 问题答案: 假设您的初始列表存储在变量x中,则可以使用以下命令: 删除空字符串:

  • 我尝试使用下面的代码从XML下面删除scheme-details1,但无法删除。 其中是。 以下是我的XML响应:-

  • 我有一个自定义列表类的应用程序。尝试使用customer参数执行foreach函数时,会发生以下情况: 重要!我不能修改主代码 主要内容: XList类: 错误:

  • 我有游戏对象的n-ary树。用户随机选择树中的一些对象并想要删除。问题在于,有些对象是另一个对象的子对象。事实证明,每次删除层次结构中的节点后,我必须遍历所有选定的节点并将其删除。算法是否比 O (n^2) 快? upd:为了更清楚我需要什么,我写了伪代码:

  • 问题内容: 如果我需要从List中删除一个对象(假设字符串“ abc” linkedList或ArrayList),则可以删除哪一个?(我认为两者都是相同的) ,如果我使用Linkedlist和arraylist,那么时间和空间的复杂度是多少 (我相信两者的时间复杂度都为O(n)相同) 问题答案: 两者都具有相同的时间复杂度-O(n),但是恕我直言,该版本会更快,尤其是在大型列表中,因为当您从数组

  • 问题内容: 在遍历列表时,我想根据条件删除列表中的项。请参见下面的代码。 这给了我一个例外。 如何才能做到这一点? 问题答案: 您需要使用和调用上,而不是使用循环。