SwiftUI:Firebase ForEach 列表执行编辑功能无法编辑选定的行项目
Posted
技术标签:
【中文标题】SwiftUI:Firebase ForEach 列表执行编辑功能无法编辑选定的行项目【英文标题】:SwiftUI: Firebase ForEach list perform edit function unable to edit the selected row item 【发布时间】:2020-07-31 15:05:08 【问题描述】:目前的场景是我从 firebase 检索数据列表并存储在一个数组中。我使用 ForEach 循环数组并使用 list 显示。对于列表中的每一行数据,我添加了一个编辑按钮来编辑选定的行项目。但是,当我单击特定行的“编辑”按钮时,它总是显示第一行的数据而不是所选行的数据。
这是我的第一个屏幕:
单击“Orange Jus”的“编辑”按钮时的屏幕:
正如您在我的第二个屏幕上看到的那样,我点击了“Orange Jus”,但它显示的是“Limau Jus”。
这是我的 ForEach 代码:
struct ManageItemListView: View
@ObservedObject var stockViewModel : StockViewModel
let getLoc: String
var body: some View
self.stockViewModel.getItemDetails(loc: self.getLoc)
return VStack
List
ForEach(stockViewModel.itemList) index in
ManageItemView(stockViewModel: self.stockViewModel, itemLst: index, getLoc: self.getLoc)
struct ManageItemView: View
let stockViewModel : StockViewModel
let itemLst : ItemList
let getLoc : String
@State var showModal = false
var body: some View
VStack
HStack
ImageView(vmLoc: self.getLoc, itemId: self.itemLst.id)
VStack(alignment: .leading)
Text(itemLst.name).fontWeight(.semibold).padding(.bottom, 5)
Text("RM\(itemLst.price)")
.padding()
Spacer()
btnEditItem(stockViewModel: self.stockViewModel, itemLst: self.itemLst, getLoc: self.getLoc)
.padding(.vertical, 10)
谢谢。
【问题讨论】:
【参考方案1】:我也有类似的问题。对我来说,它修复了将 id 添加到 ForEach 的问题,如下所示:
struct ManageItemListView: View
@ObservedObject var stockViewModel : StockViewModel
let getLoc: String
var body: some View
self.stockViewModel.getItemDetails(loc: self.getLoc)
return VStack
List
ForEach(stockViewModel.itemList, id: \.self) index in //<-- Here
ManageItemView(stockViewModel: self.stockViewModel, itemLst: index, getLoc: self.getLoc)
【讨论】:
以上是关于SwiftUI:Firebase ForEach 列表执行编辑功能无法编辑选定的行项目的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI,@Published 和 ForEach 没有更新我的视图