【问题标题】:Swift - How to calculate a sum of buttons in table view cellSwift - 如何计算表格视图单元格中的按钮总和
【发布时间】:2021-09-15 19:31:30
【问题描述】:

我有两种类型的表格单元格,一种有 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
    }


}

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

【问题讨论】:

    标签: ios swift tableview


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我建议您将 UIViewController(而不是管理 UITableView)设置为 ToggleNumberCellDelegate。然后该视图控制器可以跟踪所有按钮的总数。然后视图控制器可以将总数提供给 计算单元。这将单元之间的逻辑分开。理想情况下,控制器管理逻辑,而单元格只是显示数据的视图。

      另外,我会将 toggleNumberCell 函数更改为以下内容:

      func toggleNumberCell(_ toggleNumberCell: ToggleNumberCell, selectedValue: Int) {
          // Using += will result in adding to the existing value instead of overwriting it
          increment += selectedValue 
      }
      

      【讨论】:

        猜你喜欢
        • 2018-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-07
        • 2013-01-05
        • 1970-01-01
        相关资源
        最近更新 更多