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
。这是真正的代码吗? cellDelegate
与 CellDelegate
和两次 func plusButton(tag: Int)
无法编译。
【参考方案1】:
如果我理解您的代码,您可以修改单元格中的计数值。您是否在单元委托(即控制器)的模型中对其进行了修改?因此,您需要通过更新单元格中的标签或在单元格委托中重新加载单元格来保持单元格的一致性。
【讨论】:
以上是关于UITableview 数据在我滚动时发生变化的主要内容,如果未能解决你的问题,请参考以下文章
带有 UILabel 内容的 UITableViewCell 在滚动时发生变化
UITableview 单元格高度在 iOS 14.0 中的滚动表视图上发生变化
重新加载单元格高度变化的单元格时,UITableView 滚动到顶部