gpt4 book ai didi

ios - 滚动后重用单元​​格后如何维护 TableView 单元格中的值?

转载 作者:行者123 更新时间:2023-11-29 05:35:01 25 4
gpt4 key购买 nike

这是我的问题的 .gif:http://g.recordit.co/LnslGAaWwK.gif

首先,我可以使用递增或递减按钮来增加或减少值。但是将表格 View 滚动到底部然后返回到我之前更改的步进器后,似乎递减按钮不起作用,计数器标签中的值仍然保持不变

但是,如果我点击增量按钮,它会起作用,但仍然给出错误的值,它将重新从 1 开始,不会继续滚动之前的值。

我怀疑问题出在这里(完整的代码如下):

    override func awakeFromNib() {
super.awakeFromNib()
setStepper()
}

滚动到表格 View 底部后,awakeFromNib()中的setStepper()似乎会再次被触发,这意味着来自stepper的初始值(stepper.value = 0),将再次回到零,这可能就是为什么如果我按增量按钮,它会给出 1,而不是在滚动之前继续该值

这是我的表格 View 单元格中的代码

import UIKit
import KWStepper

protocol CounterDelegate{
func incrementOrDecrementButtonDidTapped(at selectedIndexPath:IndexPath, counterValue: Int)
}

class CheckOutCell: UITableViewCell {

var stepper: KWStepper?
var indexPath: IndexPath?
var delegate: CounterDelegate?

@IBOutlet weak var counterLabel: UILabel!
@IBOutlet weak var decrementButton: UIButton!
@IBOutlet weak var incrementButton: UIButton!

var productData : Product? {
didSet {
updateUI()
}
}

override func awakeFromNib() {
super.awakeFromNib()
setStepper()
}


func setStepper() {

stepper = KWStepper(decrementButton: decrementButton, incrementButton: incrementButton)
guard let stepper = stepper else {return}

stepper.autoRepeat = false
stepper.wraps = false
stepper.minimumValue = 0
stepper.value = 0
stepper.incrementStepValue = 1
stepper.decrementStepValue = 1

stepper.valueChangedCallback = { stepper in
let stepperValue = Int(stepper.value)

// send data to CheckoutVC
guard let indexPath = self.indexPath else {return}
self.delegate?.incrementOrDecrementButtonDidTapped(at: indexPath, counterValue: stepperValue)

print(stepperValue)

}
}



func updateUI() {

guard let productData = productData else {return}
counterLabel.text = "\(productData.quantity)"


}


}

那么如何解决这个问题呢?如何让表格 View 滚动到底部后该值继续?

最佳答案

您需要重新考虑您的策略。

TableView 只是其数据源中数据的可视化表示,并且一次只能看到数据源的一部分。

因此TableViewCell显示的数据应该存储在数据源中,而不是存储在单元格中。

将数据组织在数组中,并让 TableViews 数据源指向该数组。您需要实现 UITableViewDatasource 协议(protocol)的方法(numberOfSectionsnumberOfRowsInSection)。

然后,覆盖 cellForRowAtIndexPath,其中使用来自 indexPath.row 索引处的数据源数组的数据来设置单元格。

然后应在数据源中进行使用步进器所做的更改。

希望你能明白。

关于ios - 滚动后重用单元​​格后如何维护 TableView 单元格中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57122128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com