遇到这个问题,打了一下砖墙。
我有一个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
}
}
答案 0 :(得分:2)
它应该是这样的:
let path = IndexPath(item: 0, section: 0)
let cell = table.cellForRow(at: path) as? quantityTableViewCell
print(cell?.quantityLabel.text)
将“table”替换为您的表格对象。
答案 1 :(得分:1)
您永远不应该依赖单元格中的值,因为当用户滚动表格视图时,单元格可能会出现和消失。
相反,您应该将步进器的值存储在模型中,当用户点击按钮时,从模型中读取值(而不是从任何单元格中读取)。
所以:
quantityStepper
时,更新标签并通知某个代理(例如托管视图控制器)该值已更改。意识到:
quantityTableViewCell
addToBasketTableViewCell
时,您还应该通知代理人。然后委托(您的视图控制器)将使用他在3中获得的值,并执行必须执行的操作。通过这个approch,细胞彼此分离。您对单元重用没有任何问题,并且您可以正确初始化单元格,因为该值始终存储在模型中,并且单元格仅显示它。更新始终反映在模型中。