当静态变量改变时改变 UILabel
Change the UILabel when a static variable changes
我有一个 CartItem
结构,用于存储我在 UITableView
中显示的项目 我的 UITableView
在 CartViewController
中。我使用 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 UILabel
从 CartItem.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))
}
我有一个 CartItem
结构,用于存储我在 UITableView
中显示的项目 我的 UITableView
在 CartViewController
中。我使用 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 UILabel
从 CartItem.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))
}