【发布时间】:2020-06-24 08:40:42
【问题描述】:
我的购物车是这样的
计算所有单元格并总结总金额标签的最佳方法应该是什么
购物车是这样工作的:
单元格项目的增量使价格标签的值加倍,但是当我将新单元格出列时,它已经具有该增量值
当尝试使用自定义委托时,Delegate 总是显示 nil
我该怎么办?为什么我的委托总是 nil ?
TableViewCell
class ShoppingCartCell: UITableViewCell {
@IBOutlet weak var cellView:UIView!
@IBOutlet weak var productImageView:UIImageView!
@IBOutlet weak var productName:UILabel!
@IBOutlet weak var brandName:UILabel!
@IBOutlet weak var productPrice:UILabel!
@IBOutlet weak var modifier1Lbl:UILabel!
@IBOutlet weak var modifier2Lbl:UILabel!
@IBOutlet var counterBtns:[UIButton]!
@IBOutlet weak var counterLbl:UILabel!
var delegate : cellDelegateFunc?
override func layoutMarginsDidChange() {
super.layoutMarginsDidChange()
contentView.frame = contentView.frame.inset(by: UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10))
productImageView.layer.cornerRadius = productImageView.frame.height / 4
cellView.roundUIViewWithShadow(cornerRadius: 4, shadowColor: .darkGray)
cellView.layer.masksToBounds = false
cellView.layer.shadowColor = UIColor.lightGray.cgColor
cellView.layer.shadowOpacity = 1
cellView.layer.shadowOffset = .zero
}
override func awakeFromNib() {
super.awakeFromNib()
cellView.layer.cornerRadius = cellView.frame.height / 16
productImageView.layer.cornerRadius = productImageView.frame.height / 16
}
@IBAction func counter(_ sender:UIButton){
self.delegate?.countItems(self)
}
}
CartViewController(特定部分)
class ShoppingBagVC: UIViewController , cellDelegateFunc {
func countItems(_ cell: ShoppingCartCell) {
print("print")
}
}
协议
protocol cellDelegateFunc : class {
func countItems(_ cell:ShoppingCartCell)
}
CellForRow
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if cartAllData[indexPath.row].deal.data != nil {
let cell = cartTableView.dequeueReusableCell(withIdentifier: "cell3", for: indexPath) as! ShoppingCartDealCell
cell.originalPrice = Int(cartAllData[indexPath.row].deal.data!.dealPrice)
cell.productName.text = cartAllData[indexPath.row].deal.data?.dealName
cell.productPrice.text = "Rs.\(String(cell.originalPrice))"
cell.freeItem.text = cartAllData[indexPath.row].deal.data?.freeProduct
cell.productImageView?.sd_setImage(with: URL(string: cartAllData[indexPath.row].deal.data!.imageURL), completed: nil)
return cell
} else {
let cell = cartTableView.dequeueReusableCell(withIdentifier: "cell2", for: indexPath) as! ShoppingCartCell
var originalPrice = Int()
var price : Int = 2{
didSet {
cell.productPrice.text = "Rs.\(String(price))"
}
}
var count : Int = 1{
didSet {
cell.counterLbl.text = String(count)
price = originalPrice * count
}
}
if let value = cartAllData[indexPath.row].deal.data?.quantity {
cell.counterLbl.text = String(value)
}
if let value = cartAllData[indexPath.row].product.data?.quantity {
cell.counterLbl.text = String(value)
}
originalPrice = Int(cartAllData[indexPath.row].product.data!.productBasePrice)
cell.productPrice.text = "Rs.\(String(originalPrice))"
cell.productName.text = cartAllData[indexPath.row].product.data?.productName
cell.productImageView?.sd_setImage(with: URL(string: cartAllData[indexPath.row].product.data!.imageURL), completed: nil)
cell.modifier1Lbl.text = cartAllData[indexPath.row].product.data?.modifier1
cell.modifier2Lbl.text = cartAllData[indexPath.row].product.data?.modifier2
return cell
}
}
【问题讨论】:
-
您是否将 cellDelegateFunc 设置为 CartViewController?
-
您已经包含了与 UI 相关的代码,但进行计算不是 UI 任务,您应该在视图控制器或特定模型类中处理数据源。
-
将代码发布到您的
cellForRowAt方法 -
查看更新后的帖子
标签: swift xcode uitableview viewmodel