当产品在购物车中时显示数量标签(Swift 5)
Show Quantity label when product is in cart(Swift 5)
当用户将产品添加到 cart.The 时,所选产品必须显示递增和递减按钮。和其他产品应该只显示添加按钮。
你可以查看这张图片
问题是,当我再次返回此屏幕时,它应该显示数量标签,直到产品进入购物车。
因为我在后端没有 属性 存储产品是否在购物车中的布尔值?
谁能告诉同样的事情如何在前端做到这一点?
这样只有购物车中的商品会在产品 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
}
}
假设您的卡片是 Product
的数组,您可以检查 cellForRowAt indexPath
当前索引处的项目是否存在于您的购物车中,并相应地检查 show/hide 按钮。
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
}
当用户将产品添加到 cart.The 时,所选产品必须显示递增和递减按钮。和其他产品应该只显示添加按钮。 你可以查看这张图片
问题是,当我再次返回此屏幕时,它应该显示数量标签,直到产品进入购物车。 因为我在后端没有 属性 存储产品是否在购物车中的布尔值? 谁能告诉同样的事情如何在前端做到这一点? 这样只有购物车中的商品会在产品 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
}
}
假设您的卡片是 Product
的数组,您可以检查 cellForRowAt indexPath
当前索引处的项目是否存在于您的购物车中,并相应地检查 show/hide 按钮。
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
}