ios - 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
}
}
解决方案
您的方法存在基本问题。您不应将数据存储在表格视图单元格中。它们是视图,应该显示数据,而不是存储数据。
您应该设置一个模型对象来存储 UI 的状态。(它可以像整数数组一样简单,是表格视图中每个 ToggleNumberCell 的值之一。)
您应该有一个控制器对象作为 ToggleNumberCell 的委托。当调用它的 toggleNumberCell 方法时,它将更新数据模型中该单元格条目的计数,然后告诉整个单元格进行自我更新。您的表视图数据源将查询模型并使用模型中每个条目的值来计算总计,然后将该值安装在总计单元格中。
推荐阅读
- azure-devops - ADO - 让一个跨多个分支的管道触发另一个管道
- mysql - 什么可能导致 mysql db read 返回陈旧数据
- mysql - 带有 TRIGGER 语法的 mySQL 错误代码 1136
- r - 使用多根求解 R 中的积分方程组
- python - 函数返回语句中的语法错误
- stm32 - STM32F103C8T6 "0x00200000U" HAL_CAN_ERROR_PARAM
- android - 如何以自定义方式在 kotlin 中对 mutableList 的元素进行排序
- javascript - 独立运行的函数内的 Javascript 警报
- visual-studio - 除非连接了 VPN,否则不会安装具有多个源(两个 corp 和两个 Microsoft)的 nuget 包
- reactjs - 你可以在反应中做哪些类型的测试?