【问题标题】:UITableview data is changing when I scrollUITableview 数据在我滚动时发生变化
【发布时间】:2021-03-05 16:02:11
【问题描述】:

我已经在我的单元格中制定了这个协议

protocol CellDelegate: AnyObject{
func plusButton(tag: Int) 
func minusButton(tag: Int)   
}

class CartTableViewCell: UITableViewCell {    
@IBOutlet weak var plusButton: UIButton!
@IBOutlet weak var minusButton: UIButton!
@IBOutlet weak var itemsCountLabel: UILabel!

weak var delegate: CellDelegate?
var count = 0
var totalAmount = 0.0
var modelPrice:Double = 0.0
override func awakeFromNib() {
    super.awakeFromNib()
    itemsCountLabel.text = String(count)
    
}

@IBAction func addButton(_ sender: Any) {
    
    delegate?.plusButton(tag: (sender as AnyObject).tag)
    count += 1
    totalAmount = modelPrice * Double(count)
    itemsCountLabel.text = String(count)
    
}

@IBAction func minusButton(_ sender: Any) {
    delegate?.minusButton(tag: (sender as AnyObject).tag)
    if count > 0{
        count -= 1
        totalAmount = modelPrice * Double(count)
        it  emsCountLabel.text = String(count)
        print(totalAmount)
    }
}

}

这是我在视图控制器中的 cellForRowat 方法中放置的代码

cell.delegate = self
cell.plusButton.tag = indexPath.row

并添加了这个扩展

extension ViewController: CellDelegate{
func plusbutton(tag: Int)
func minusButton(tag:Int)}

当我点击加号按钮时,我的 countLabel 会增加,反之亦然。问题是当我滚动 tableView 时,我的值被打乱了(不一样)。这是什么原因以及如何解决。

【问题讨论】:

  • 细胞被重复使用。确保所有 UI 元素都设置为 cellForRow 中定义的状态。而(sender as AnyObject) 非常unswifty。将sender 参数更改为真实类型UIButton。这是真正的代码吗? cellDelegateCellDelegate 和两次 func plusButton(tag: Int) 无法编译。

标签: swift uitableview tableview


【解决方案1】:

如果我理解您的代码,您可以修改单元格中的计数值。您是否在单元委托(即控制器)的模型中对其进行了修改?因此,您需要通过更新单元格中的标签或在单元格委托中重新加载单元格来保持单元格的一致性。

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2014-10-27
    • 1970-01-01
    相关资源
    最近更新 更多