ios - swift - 如何设置另一个类的 UIStepper 值?

标签 ios swift uitableview uistepper

我有一个 tableview,其中包含一些带有 UIStepper 的 tableviewcell。这是 tableviewcell 代码:

class ShoppingCartItemCell: UITableViewCell {
static let reuseIdentifier = "ShoppingCartItemCell"

@IBOutlet weak var itemImage: UIImageView!
@IBOutlet weak var itemNameLabel: UILabel!
@IBOutlet weak var itemProviderLabel: UILabel!
@IBOutlet weak var itemPriceLabel: UILabel!
@IBOutlet weak var itemQuantityText: UITextField!
@IBOutlet weak var quantityStepper: UIStepper!

var oldValue = 0.0

var itemName = "" {
    didSet {
        itemNameLabel.text = itemName
    }
}

var itemProvider = "" {
    didSet {
        itemProviderLabel.text = itemProvider
    }
}

var itemPrice = "" {
    didSet {
        itemPriceLabel.text = itemPrice
    }
}

var itemQuantity = "" {
    didSet {
        itemQuantityText.text = itemQuantity
    }
}
}

这是 TableView 中的 uistepper 代码:

class ShoppingCartViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
     @IBOutlet weak var tableView: UITableView!
     @IBAction func quantityStepper(_ sender: UIStepper) {
     ShoppingCartItemCell.itemQuantity = "\(Int(sender.value))"// this way is not possible...
     // How to update the quantityStepper value in ShoppingCartItemCell class here
     }
}

如何更新 ShoppingCartViewController 类中的 quantityStepper 值?有些人会告诉我在 ShoppingCartItemCell 类中创建 quantityStepper 的 @IBAction,但我的业务逻辑必须这样做。请帮忙。谢谢大家。

最佳答案

我强烈推荐在 Swift 4 中使用 Key-Value Observation,它很容易实现

在单元格中创建一个 NSKeyValueObservation 属性

var observation : NSKeyValueObservation?

cellForRowAt 的 View Controller 中设置步进器和标签的值,添加观察者

let item = dataSource[indexPath.row] // assuming `dataSource` is the data source array
cell.quantityStepper.value = item.quantity
cell.itemQuantityText.text = "\(item.quantity)"
cell.observation = cell.quantityStepper.observe(\.value, options: [.new]) { (stepper, change) in
     cell.itemQuantityText.text = "\(change.newValue!)"
     // update the data model for example
     item.quantity = change.newValue!
}

最后,在单元格离开屏幕后,您必须在 didEndDisplaying 中移除观察者。

func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    (cell as! ShoppingCartItemCell).observation = nil
}

没有IBAction,没有协议(protocol)/委托(delegate)。它非常简单高效。

关于ios - swift - 如何设置另一个类的 UIStepper 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49832352/

相关文章:

ios - 为什么 Interface Builder 通过其上方的 View 显示隐藏的 View ?

ios - 反转按钮动画

IOS swift firebase auth 登录不正确

iphone - NSFetchedResultsController 添加实体在 tableView 中插入空白行

ios - 在 TableView 中分组

ios - 将单元格粘贴到屏幕底部

iphone - 何时在 Objective-C 中使用属性?

swift - 这段 Swift 代码应该会产生内存泄漏,但实际上并没有。有人可以指出为什么吗?

ios - swift:如何调整 TableView 的高度以适应 super View 的高度

ios - swift UICollectionView : didSelectItemAtIndexPath not responding