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 列表执行编辑功能无法编辑选定的行项目的主要内容,如果未能解决你的问题,请参考以下文章

过滤 Firebase 数据 SwiftUI

SwiftUI,@Published 和 ForEach 没有更新我的视图

我无法在 SwiftUI 中使用 foreach 呈现我的视图

SwiftUI 无限 TabView 项

SwiftUI 中的两个 ForEach

SwiftUI 中的 ForEach