如何在部分单元格的页脚单元格中获得总计?

How to get total in footer cell of cells in sections?

目前我能够让单元格在页脚单元格部分中将它们的总数相加。但它会计算每个单元格的总数,无论它位于所有部分页脚内的哪个部分。

我仍然无法将选择了不同价格的单元格的不同价格(价格 1 - 3)加起来并传递给第

部分

我使用代码在 CartFooter 中为 cartFooter.cartTotal.text = "\(String(cart.map{[=13=].cartItems.price1}.reduce(0.0, +)))"

部分的单元格添加总计

之前:

我正在尝试让每个部分中的单元格将它们所在的每个部分的 脚注单元格 中的总数相加。

购物车VC中的数据是从另一个VC(主页VC)填充的。这就是为什么当数据填充单元格时,CartCell 中有 3 个不同的价格选项。

我只是想知道如何在 页脚 中获取

部分单元格的总数

在此先致谢,非常感谢您的帮助

extension CartViewController: UITableViewDelegate, UITableViewDataSource {

    func numberOfSections(in tableView: UITableView) -> Int {
        return brands
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        let brand = brands[section]
        return groupedCartItems[brand]!.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cartCell = tableView.dequeueReusableCell(withIdentifier: "CartCell") as! CartCell

        let brand = brands[indexPath.section]
        let cartItemsToDisplay = groupedCartItems[brand]![indexPath.row]
        cartCell.configure(withCartItems: cartItemsToDisplay.cartItems)

        return cartCell
    }

     func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let cartHeader = tableView.dequeueReusableCell(withIdentifier: "CartHeader") as! CartHeader

        let headerTitle = brands[section]
        cartHeader.brandName.text = "Brand: \(headerTitle)"

    return cartHeader
    }

    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
         let cartFooter = tableView.dequeueReusableCell(withIdentifier: "FooterCell") as! FooterCell
        let sectionTotal = cart[section].getSectionTotal()

        let calculate = String(cart.map{[=10=].cartItems.price1}.reduce(0.0, +))
        cartFooter.cartTotal.text = "$\(calculate)"

        return cartFooter
    }

}

更新: 这些是我在 CartFooter

中使用它得到的结果
let calculate = String(cart.map{[=11=].cart.price1}.reduce(0.0, +))
cartFooter.cartTotal.text = "$\(calculate)"

计算所有部分的 总计 (OT) 并将 OT 放在所有页脚单元格中(如下所示 ▼),当我试图获得总计时页脚中的每个部分(如右上图▲所示)

更新2:

这是我在我的 cellForRowAt 中添加的内容,以便在部分页脚中添加总计。它会将单元格的数据相加,但不会在页脚中给出准确的总数

    var totalSum: Float = 0

    for eachProduct in cartItems{
        productPricesArray.append(eachProduct.cartItem.price1)
        productPricesArray.append(eachProduct.cartItem.price2)
        productPricesArray.append(eachProduct.cartItem.price3)
        totalSum = productPricesArray.reduce(0, +)

        cartFooter.cartTotal.text = String(totalSum)
    }

如果您想更正计算每个部分的总价,您需要为每个部分过滤项目。现在我想你总结了你所有的部分。 对于正确的部分,您需要 cellForRow 方法中的剪接器:

let brand = brands[indexPath.section]
        let cartItemsToDisplay = groupedCartItems[brand]![indexPath.row]
        cartCell.configure(withCartItems: cartItemsToDisplay.cart)

里面:

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
         let cartFooter = tableView.dequeueReusableCell(withIdentifier: "FooterCell") as! FooterCell
        let sectionTotal = cart[section].getSectionTotal()
        let brand = brands[section]
        let catrItemsToDisplay = // now you need to get associated items with this brand (cart)
    // I think it is can looks like this  =  cartItemsToDisplay[brand]
        let calculate = String(cartItemsToDisplay.cart.reduce(0.0, +))
        cartFooter.cartTotal.text = "$\(calculate)"

        return cartFooter
    }

代码很多,我不太确定你的编码错误在哪里。话虽如此:

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
     let cartFooter = tableView.dequeueReusableCell(withIdentifier: "FooterCell") as! FooterCell
    let sectionTotal = cart[section].getSectionTotal()

    let calculate = String(cart.map{[=10=].cart.price1}.reduce(0.0, +))
    cartFooter.cartTotal.text = "$\(calculate)"

    return cartFooter
}

你的代码似乎在说 let sectionTotal = cart[section].getSectionTotal() 是你正在寻找的总数(即一个部分内的总数),而你在一个部分中显示 OT,通过总结 String(cart.map{[=12=].cart.price1}.reduce(0.0, +))

换句话说,如果 cartFooter 是将在一个部分中显示总数的容器,那么应​​该改为 cartFooter.cartTotal.text = "$\(sectionTotal)",不是吗?

如果这不是答案,我建议你在每次实例化footerView时都设置一个断点,并弄清楚为什么它输出它输出的内容(即OT,而不是部分总计)。

@Evelyn 直接在页脚中尝试计算。试试下面的代码。

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let cartFooter = tableView.dequeueReusableCell(withIdentifier: "FooterCell") as! FooterCell
    let brand = brands[indexPath.section]
    let arrAllItems = groupedCartItems[brand]!
    var total: Float = 0
    for item in arrAllItems {
        if item.selectedOption == 1 {
             total = total + Float(item.price1)
        } else item cartItems.selectedOption == 2 {
             total = total + Float(item.price2)
        } else if item.selectedOption == 3 {
             total = total + Float(item.price3)
        }
    }
    cartFooter.cartTotal.text = "$\(total)"
    return cartFooter
}

修改您的模型结构和通过 TableViewDelegate 设置值的方式。给出一个简短的提示。请看看是否有帮助:

class Cart {
   var brandWiseProducts: [BrandWiseProductDetails]!

   init() {
       brandWiseProducts = [BrandWiseProductDetails]()
   }

   initWIthProducts(productList : [BrandWiseProductDetails]) {
       self.brandWiseProducts = productList 
   }    
}



class BrandWiseProductDetails {
      var brandName: String!
      var selectedItems: [Items] 
      var totalAmount: Double or anything
}

class SelectedItem {
     var image
     var name
     var price
}


  Sections:

  Cart.brandWiseProducts.count

  SectionTitle:

  Cart.brandWiseProducts[indexPath.section].brandName

  Rows in section

  Cart.brandWiseProduct[indexPath.section].selectedItem[IndexPath.row]

  Footer:

  Cart.brandWiseProduct.totalAmount