点击 SwiftUI 时从列表中删除
Posted
技术标签:
【中文标题】点击 SwiftUI 时从列表中删除【英文标题】:Delete From List When Tapped 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)
【问题讨论】:
【参考方案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
,并且动作是删除功能,在你当前的按钮之外。我已经用一些数据进行了测试,它有效以上是关于点击 SwiftUI 时从列表中删除的主要内容,如果未能解决你的问题,请参考以下文章