当静态变量改变时改变 UILabel

Change the UILabel when a static variable changes

我有一个 CartItem 结构,用于存储我在 UITableView 中显示的项目 我的 UITableViewCartViewController 中。我使用 custom cell 作为我的 table view。这是我的 custom cell:

class CartItemCell: UITableViewCell {

@IBOutlet weak var productImage: UIImageView!
@IBOutlet weak var productName: UILabel!
@IBOutlet weak var productPrice: UILabel!
@IBOutlet weak var productTotalPrice: UILabel!
@IBOutlet weak var stepper: UIStepper!



override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

var cellIndex: Int?

var product: CartItem?{
    didSet{
    
    // change the cell in table view when first 
    // initialized and when stepper value is changed 
    .
    .
    .
}

@IBAction func stepperValueChanged(_ sender: UIStepper) {
    CartItem.cartItems[self.cellIndex!].number = Int(sender.value)
    self.product?.number = CartItem.cartItems[self.cellIndex!].number
    }
}

CartViewController 中,我有 totalPrice UILabelCartItem.totalPrice 静态变量中获取值。每次单击我的 UITableViewCell 中的 UIStepper 时,都会计算并更改 CartItem.totalPrice 的值。这是 CartViewController

的摘要
class CartViewController: UIViewController{

@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var cartLabel: UILabel!
@IBOutlet weak var totalPrice: UILabel!

var items = CartItem.cartItems

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = self
    tableView.delegate = self
    tableView.register(UINib(nibName: "CartItemCell", bundle: nil), forCellReuseIdentifier: "ReusableCell")
    self.totalPrice.text = String(Int(CartItem.totalPrice))
    tableView.reloadData()
}
}


extension CartViewController: UITableViewDataSource{

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ReusableCell", for: indexPath) as! CartItemCell
    
    cell.product = items[indexPath.item]
    cell.cellIndex = indexPath.item
    return cell
}

}



我希望每次 CartItem.totalPrice 更改时 CartViewController 中的 totalPrice 标签也更改。我更改 CartItemCell

CartItem.totalPrice 的值

谢谢

使用委托或闭包将值从 tableviewcell 更新为 viewController

Protocol CartItemProtocol: AnyObject{
    func valueUpdated() 
}

class CartItemCell: UITableViewCell {

@IBOutlet weak var productImage: UIImageView!
@IBOutlet weak var productName: UILabel!
@IBOutlet weak var productPrice: UILabel!
@IBOutlet weak var productTotalPrice: UILabel!
@IBOutlet weak var stepper: UIStepper!
weak var delegate: CartItemProtocol?


override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}

var cellIndex: Int?

var product: CartItem?{
    didSet{

    // change the cell in table view when first 
    // initialized and when stepper value is changed 
    .
    .
    .
}

@IBAction func stepperValueChanged(_ sender: UIStepper) {
    CartItem.cartItems[self.cellIndex!].number = Int(sender.value)
    self.product?.number = CartItem.cartItems[self.cellIndex!].number
   self.delegate.valueUpdated()
    }
}

并在 cellforRow 中设置委托

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

    cell.product = items[indexPath.item]
    cell.cellIndex = indexPath.item
    cell.delegate = self
    return cell
}

并在委托构造中更新标签

extension CartViewController:CartItemProtocl{
    self.totalPrice.text = String(Int(CartItem.totalPrice))
}