UITableview 数据在我滚动时发生变化

Posted

技术标签:

【中文标题】UITableview 数据在我滚动时发生变化【英文标题】:UITableview data is changing when I scroll 【发布时间】: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) 无法编译。 【参考方案1】:

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

【讨论】:

以上是关于UITableview 数据在我滚动时发生变化的主要内容,如果未能解决你的问题,请参考以下文章

带有 UILabel 内容的 UITableViewCell 在滚动时发生变化

UITableview 单元格高度在 iOS 14.0 中的滚动表视图上发生变化

滚动时 UITableViewCell 图像发生变化

重新加载单元格高度变化的单元格时,UITableView 滚动到顶部

防止 UICollectionView 中每个 UICollectionViewCell 中的内容在我滚动时发生变化?

为啥滚动时 RecyclerView (在我的情况下)中 CardView 的内容会发生变化?