【发布时间】:2019-04-07 08:15:19
【问题描述】:
这是我的问题的 .gif:http://g.recordit.co/LnslGAaWwK.gif
首先,我可以使用递增或递减按钮来增加或减少值。但是在将表格视图滚动到底部然后返回到我之前更改的步进器之后,递减按钮似乎不起作用,计数器标签中的值仍然保持不变
但是,如果我点击增量按钮,它可以工作,但仍然给出错误的值,它将从 1 重新开始,它不会在滚动之前继续该值。
我怀疑问题出在这里(完整代码如下):
override func awakeFromNib() {
super.awakeFromNib()
setStepper()
}
似乎在滚动到表格视图底部之后,似乎awakeFromNib()中的setStepper()会再次被触发,这意味着来自步进器(stepper.value = 0)的初始值,将再次回到零,这可能是为什么如果我按下增量按钮,它会给出 1,滚动前不继续值
这是我的表格视图单元格中的代码
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)"
}
}
那么如何解决这个问题呢?将表格视图滚动到底部后如何使值继续?
【问题讨论】:
-
看来你需要在增减过程中更新
productData.quantity,让我看看你的table view controller -
您的单元格不应该知道有关数据模型或其行的任何信息。回调应该是 I;tomyoir 视图控制器,可以更新数据模型
标签: ios swift uitableview stepper