You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI实现点击Add按钮将商品添加至Row视图的方法问询

实现方案

1. 在详情页调用添加商品方法

修改ProductDetailSheet,注入CartManager实例,并在Add按钮的点击事件中调用addToCart方法:

struct ProductDetailSheet: View {
    let product: Product
    @Binding var isSheetPresented: Product?
    @State private var amount = 1
    // 注入CartManager
    @EnvironmentObject var cartManager: CartManager
    
    var body: some View {
        VStack{
            VStack {
                Image(product.image)
                Spacer()
                Text(product.name)
                    .presentationDetents([.height(200)])
                    .presentationBackgroundInteraction(.enabled(upThrough: .medium))
            }
            HStack{
                Button("Close") {
                    isSheetPresented = nil
                }
                Spacer()
                Button("Add") {
                    // 添加商品到购物车
                    cartManager.addToCart(product: product)
                    isSheetPresented = nil
                }
                Spacer()
                Stepper("Enter an amount: \(amount)", value: $amount, in: 0...200)
            }
        }
        .padding()
    }
}

2. 确保Recommended视图能获取CartManager

如果Recommended是通过导航跳转进入的,需要在跳转时传递environmentObject,比如在PackingList的导航栏添加跳转按钮:

struct PackingList: View {
    // 原有代码不变
    var body: some View {
        NavigationStack {
            // 原有商品列表代码
            .navigationTitle(Text("Hello"))
            .toolbar {
                NavigationLink("查看已选") {
                    Recommended()
                        .environmentObject(cartManager)
                }
            }
        }
    }
}

3. 可选:完善ProductRow的删除功能

如果需要点击垃圾桶图标删除商品,给ProductRow注入CartManager并添加点击事件:

struct ProductRow: View {
    var product: Product
    @EnvironmentObject var cartManager: CartManager
    
    var body: some View {
        HStack(spacing: 20) {
            // 原有视图代码
            Image(systemName: "trash")
                .foregroundColor(Color(hue: 1.0, saturation: 0.89, brightness: 0.835))
                .onTapGesture {
                    cartManager.removeFromCart(product: product)
                }
        }
    }
}

验证效果

完成以上修改后,点击详情页的Add按钮,商品会被添加到cartManager.products数组,Recommended视图会自动监听数组变化,实时刷新展示所有已添加的商品Row。


内容的提问来源于stack exchange,提问作者iFlyZed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:46:07