如何在部分单元格的页脚单元格中获得总计?
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
目前我能够让单元格在页脚单元格部分中将它们的总数相加。但它会计算每个单元格的总数,无论它位于所有部分页脚内的哪个部分。
我仍然无法将选择了不同价格的单元格的不同价格(价格 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