繁体   English   中英

Swift - 如何在按下不同自定义单元格中的按钮时获取自定义单元格标签的值?

[英]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 ,更新标签并通知某个委托(例如托管视图控制器)该值已更改。 意识到:
    1. 应该从内部直接更新模型quantityTableViewCell
    2. 相反,您应该向某个委托(实现此协议)发送一条消息(=您自己的协议),以通知它该值已更改为某个值
    3. 代理人(可能是您的视图控制器)会将此值存储在某处
  • 调用addToBasketTableViewCell ,您还应该通知addToBasketTableViewCell 然后,委托(您的视图控制器)将使用他在3中获得的值,并执行必须执行的操作。

通过这个approch,细胞彼此分离。 您对单元重用没有任何问题,并且您可以正确初始化单元格,因为该值始终存储在模型中,并且单元格仅显示它。 更新始终反映在模型中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM