【问题标题】:how to maintain the value in table view cell after the cell is reused after scrolling?滚动后重用单元​​格后如何维护表格视图单元格中的值?
【发布时间】: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


【解决方案1】:

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

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

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

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

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

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

希望你能明白。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    相关资源
    最近更新 更多