[英]Swift - How to get the value of a custom cell label when pressing a button in a different custom cell?
用这个问题打了一下砖墙。
我有一个TableView哪个动态原型。 TableView有2个部分。
第1节从xib文件加载自定义TableViewCell。 单元格包含一个步进器和一个标签:
class quantityTableViewCell: UITableViewCell {
@IBOutlet weak var quantityLabel: UILabel!
@IBAction func quantityStepper(_ sender: UIStepper) {
quantityLabel.text = String(Int(sender.value))
}
}
第2节加载另一个自定义TableViewCell,它只包含一个按钮:
class addToBasketTableViewCell: UITableViewCell {
@IBOutlet weak var submitButton: UIButton!
}
现在在我的TableView类中,两个单元格都在自己的部分中加载,我想在第二部分中单击按钮并将结果打印到控制台时,在第一部分内捕获'quantityLabel'的当前值。
例如,如果我将值调到5,当我点击'submitButton'时它会打印'5'。
我有点不确定如何解决这个问题,任何指导都会很棒。 下面是正在加载的单元格的副本:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let item: ItemPreBasketModel = cellItems[indexPath.row] as! ItemPreBasketModel
if indexPath.section == 0 {
let quantityCell = Bundle.main.loadNibNamed("quantityTableViewCell", owner: self, options: nil)?.first as! quantityTableViewCell
return quantityCell
} else if indexPath.section == 1 {
let addToBasketCell = Bundle.main.loadNibNamed("addToBasketTableViewCell", owner: self, options: nil)?.first as! addToBasketTableViewCell
return addToBasketCell
}
}
它应该是这样的:
let path = IndexPath(item: 0, section: 0)
let cell = table.cellForRow(at: path) as? quantityTableViewCell
print(cell?.quantityLabel.text)
用表对象替换“table”。
您永远不应该依赖单元格中的值,因为当用户滚动表格视图时,单元格可能会出现和消失。
相反,您应该将步进器的值存储在模型中,当用户点击按钮时,从模型中读取值(而不是从任何单元格中读取)。
所以:
quantityStepper
,更新标签并通知某个委托(例如托管视图控制器)该值已更改。 意识到:
quantityTableViewCell
addToBasketTableViewCell
,您还应该通知addToBasketTableViewCell
。 然后,委托(您的视图控制器)将使用他在3中获得的值,并执行必须执行的操作。 通过这个approch,细胞彼此分离。 您对单元重用没有任何问题,并且您可以正确初始化单元格,因为该值始终存储在模型中,并且单元格仅显示它。 更新始终反映在模型中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.