产品在购物车中时显示数量标签(Swift 5)

Posted

技术标签:

【中文标题】产品在购物车中时显示数量标签(Swift 5)【英文标题】:Show Quantity label when product is in cart(Swift 5) 【发布时间】:2020-11-27 12:49:32 【问题描述】:

当用户将产品添加到购物车时。所选产品必须显示递增和递减按钮。和其他产品应该只显示添加按钮。 你可以看看这张图片

问题是当我再次返回此屏幕时,它应该显示数量标签,直到产品在购物车中。 因为我在后端没有存储产品是否在购物车中的布尔值的属性? 谁能告诉同样的事情如何在前端做到这一点? 这样只有购物车中的商品才会在产品 TableView 中显示数量标签。

这是我的代码

产品表视图

func getCartDetails()
    
        ApiCaller().getData(url: get_cart_url, resultType: CartResult.self)  (results) in
            self.iddd = results.result!.id
            self.c = results.result!
            guard let resultArray = results.result?.cartItems as? [CartItem] else return 
            UserDefaults.standard.set(results.result?.cartItems.count, forKey: "totalItemsInCart")
            
            for cart in resultArray
            
                
                self.cAr.append(cart)
                
            
            
            
            
        
        
    


func addItem(prodId:String,qty:Int,cartId:String)
    
 
        let request = cartProducts(products: [addCartProducts(prodId:prodId, q: qty + 1)])
        
        do
        
            let encodedResult = try JSONEncoder().encode(request)
            
            ApiCaller().postData(url: update_cart_url+cartId+"/update", requestBody: encodedResult, requestMethod: "PUT", resultType: UpdateCartResults.self)  (results) in
                print(results.statusCode)
              
                
                DispatchQueue.main.async 
                   

                    self.tableView.reloadData()
                
                
            
            
            
        catch 
            print(error)
            return
        
            
        
    


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ProductsTVCell
        

        cell.generateCells(products: productArray[indexPath.row])
        
 
        let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: rupee + "\(productArray[indexPath.row].mrpAfterDiscount)")
        attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 1, range: NSMakeRange(0, attributeString.length))
        
        cell.secondPriceLbl.attributedText = attributeString
        
        cell.addBtnLbl.tag = indexPath.row
        
        


let productAtIndex = self.productArray[indexPath.row]

          
        
        if cAr.contains(where:  (item) -> Bool in
            productAtIndex.id == item.id
        )
            // product is in cart, show increment/decrement button
            
             cell.addBtnLbl.isHidden = true
         else 
            // product not in cart, show add button
            
             cell.addBtnLbl.isHidden = false
        
        
        cell.callBackForAddButtonHidden = 
        
            cell.addBtnLbl.isHidden = true
            guard self.c != nil else 
                print("Creating cart for the first time")
                self.createCart(prodId: self.productArray[indexPath.row].id, qty: 1)
                return
                
            
                self.addItem(prodId: self.productArray[indexPath.row].id, qty: 0, cartId: self.c!.id)
        
        
    
        cell.selectionStyle = .none
        
        return cell
     

这是我的产品 TableView 单元格 我尝试使用比较 cartDetails 和 productDetails 但它不起作用所以我评论了它。

func generateCells(products:Product)
    
        self.productNameLbl.text = products.name
        self.productDescriptionLbl.text = products.additionInfo
        self.productPriceLbl.text = rupee + String(products.productMRP)

        if products.discountPercentage != 0
        
        self.discountLbl.text = "\(products.discountPercentage)% Off"
         else 
            self.discountLbl.isHidden = true
        
        //

//        if products.id == cartDetails.id
//        
//            addBtnLbl.isHidden = true
//            self.quantityLbl.text = "\(cartDetails.qty)"
//         else 
//            addBtnLbl.isHidden = false
//        
        
        
        self.productImgView.sd_setImage(with: URL(string: products.imgURL))  (image, error, cache, url) in
            
        
        
    

【问题讨论】:

【参考方案1】:

假设您的卡片是Product 的数组,您可以在cellForRowAt indexPath 中检查当前索引处的商品是否存在于您的购物车中,并相应地显示/隐藏按钮。

let productAtIndex = self.productArray[indexPath.row]

    if cart.contains(where:  (item) -> Bool in
        productAtIndex.id == item.id
    )
        // product is in cart, show increment/decrement button
     else 
        // product not in cart, show add button
    

【讨论】:

这段代码工作正常,但是当我尝试添加新产品时,它显示 qunatity 1 秒,然后再次设置为 false 当您拨打self.createCartself.addItem时,产品id在哪里更新?不是在cAr数组中吗? 它正在更新,但 cAr 没有更新。当我再次加载该视图时它会更新。我认为这会导致错误 然后在cellForRowAt indexPath中使用该数组而不是cAr 我需要制作新的 arr 来存储 productItem 吗?现在当用户点击添加按钮时,它会发布数据,当我们再次加载视图时。我们从 Cart api 获取数据并将其附加到 cAr

以上是关于产品在购物车中时显示数量标签(Swift 5)的主要内容,如果未能解决你的问题,请参考以下文章

获取 WooCommerce Ajax 上的产品 ID、名称和数量添加到购物车以显示通知

仅当强制性类别的产品在购物车中时才允许结帐

如何在swift 3中从标签栏移动时重新加载页面?

微信小程序——购物车结算

Laravel 将相同产品的添加到购物车按钮添加到购物车,数量 +1

根据 WooCommerce 购物车中的商品数量和产品类别禁用支付网关