首页 > 解决方案 > Swift - 如何计算表格视图单元格中的按钮总和

问题描述

我有两种类型的表格单元格,一种有 6 个按钮,每个按钮都有一个数值,第二个单元格有一个按钮来计算所选数字的总和,还有一个标签来显示这个总和.

我的问题是我无法获得标签来计算总数。这是我到目前为止所拥有的

数字单元格

protocol ToggleNumberCellDelegate: AnyObject {
    /// This method detects the selected value of the cell.
    func toggleNumberCell(_ toggleNumberCell: ToggleNumberCell, selectedValue: Int)
}

class ToggleNumberCell: UITableViewCell {
    static let reuseIdentifier = String(describing: ToggleNumberCell.self)

    @IBOutlet private weak var titleLabel: UILabel!
    @IBOutlet private weak var zeroButton: UIButton!
    @IBOutlet private weak var oneButton: UIButton!
    @IBOutlet private weak var twoButton: UIButton!
    @IBOutlet private weak var threeButton: UIButton!
    @IBOutlet private weak var fourButton: UIButton!
    @IBOutlet private weak var fiveButton: UIButton!
    @IBOutlet private weak var sixButton: UIButton!

    private weak var delegate: ToggleNumberCellDelegate?
    private var value: Int?

//...
@IBAction func buttonTapped(_ sender: UIButton) {
        
        switch sender {
        case zeroButton:
            self.zeroButton.backgroundColor = UIColor.NBABlue
            self.zeroButton.tintColor = UIColor.white
            self.value = 0
            self.delegate?.toggleNumberCell(self, selectedValue: self.value!)
            print("The value you tapped is \(value)")

        case oneButton:
            self.oneButton.backgroundColor = UIColor.NBABlue
            self.oneButton.tintColor = UIColor.white
            self.value = 1
            self.delegate?.toggleNumberCell(self, selectedValue: self.value!)
            print("The value you tapped is \(value)")

        case twoButton:
            self.twoButton.backgroundColor = UIColor.NBABlue
            self.twoButton.tintColor = UIColor.white
            self.value = 2
            self.delegate?.toggleNumberCell(self, selectedValue: self.value!)
            print("The value you tapped is \(value)")

上面的代码只是设置了按钮,并通过使用它的委托给每个按钮一个值。

标签单元格

class CalculateCell: UITableViewCell, ToggleNumberCellDelegate {
    var increment = 0
    static let reuseIdentifier = String(describing: CalculateCell.self)
    @IBOutlet private weak var calculateButton: UIButton!
    @IBOutlet private weak var totalLabel: UILabel!

    func configure(answer: AnswerModel) {
        self.backgroundColor = UIColor.secondarySystemGroupedBackground
        self.totalLabel.text = answer.text
        self.totalLabel.font = .preferredFont(forTextStyle: .headline)
        calculateButton.layer.cornerRadius = 10.0
    }

    override func prepareForReuse() {
        super.prepareForReuse()
        self.totalLabel.text = nil
    }

    @IBAction func calculateTapped(_ sender: UIButton) {
        // You need to get the selected value in here somehow.
        

    }

    func toggleNumberCell(_ toggleNumberCell: ToggleNumberCell, selectedValue: Int) {
        increment = selectedValue
    }


}

在这里,我调用了委托来获取选定的值,但我认为我做错了,有人可以告诉我如何计算总值吗?这是我想要实现的屏幕截图。 在此处输入图像描述

标签: iosswifttableview

解决方案


您的方法存在基本问题。您不应将数据存储在表格视图单元格中。它们是视图,应该显示数据,而不是存储数据。

您应该设置一个模型对象来存储 UI 的状态。(它可以像整数数组一样简单,是表格视图中每个 ToggleNumberCell 的值之一。)

您应该有一个控制器对象作为 ToggleNumberCell 的委托。当调用它的 toggleNumberCell 方法时,它将更新数据模型中该单元格条目的计数,然后告诉整个单元格进行自我更新。您的表视图数据源将查询模型并使用模型中每个条目的值来计算总计,然后将该值安装在总计单元格中。


推荐阅读