Как сохранить значение в ячейке табличного представления после повторного использования ячейки после прокрутки? - PullRequest
0 голосов
/ 03 ноября 2018

вот. GIF моей проблемы: http://g.recordit.co/LnslGAaWwK.gif

сначала я могу использовать кнопку увеличения или уменьшения, чтобы увеличить или уменьшить значение. но после прокрутки табличного представления вниз и затем назад к степперу, который я изменил ранее, кажется, что кнопка декремента *1005* не работает, значение с метки счетчика остается прежним

но, если я нажму кнопку увеличения , она сработает, но все равно с неправильным значением, она начнется снова с 1, она не продолжит значение перед прокруткой.

Я подозреваю, что проблема здесь (полный код ниже):

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

кажется, что после прокрутки к нижней части табличного представления, setStepper() в awakeFromNib() будет снова запущено, и это означает, что начальное значение из степпера (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)"


    }


}

так как решить эту проблему? как заставить значение продолжать после прокрутки табличного представления к основанию?

1 Ответ

0 голосов
/ 03 ноября 2018

Вам нужно пересмотреть свою стратегию.

TableView - это только визуальное представление данных в его источнике данных, и одновременно видна только часть источника данных.

Таким образом, данные, которые отображаются в TableViewCell, должны храниться в источнике данных, а не в ячейке.

Организуйте свои данные в массиве и позвольте источнику данных TableViews указывать на этот массив. Вам необходимо реализовать методы протокола UITableViewDatasource (numberOfSections, numberOfRowsInSection).

Затем переопределите cellForRowAtIndexPath, где ячейка настроена на данные, поступающие из массива источника данных с индексом indexPath.row.

Изменения, сделанные с вашим степпером, должны быть внесены в источник данных.

Надеюсь, вы поняли идею.

...