как обновить данные UITableView при прокрутке - PullRequest
0 голосов
/ 25 мая 2018

Я отобразил данные в UITableView. Список предназначен для добавления товаров в корзину.

enter image description here

Согласно этой картинке можносм. следующие данные: -

  1. цена
  2. Наименование продукта
  3. Степпер для добавления количества
  4. Общая сумма

Итак, для этого сначала я добавил продукт в UITableView.Затем шаговое действие для увеличения или уменьшения количества, я дал код в соответствии с.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let identifier = "cell"
        var cell: ChartCell! = tableView.dequeueReusableCell(withIdentifier: identifier) as? ChartCell

        if cell == nil {
            tableView.register(UINib(nibName: "ChartCell", bundle: nil), forCellReuseIdentifier: identifier)
            cell = tableView.dequeueReusableCell(withIdentifier: identifier) as? ChartCell
        }


     cell.setEventData(carts: chartViewModel.datafordisplay(atindex: indexPath))

    cell.cartadd = { [weak self] in

        if let i = self?.tableView.indexPath(for: $0) {

            let productid = self?.chartViewModel.datafordisplay(atindex: indexPath)
            print(productid?.cartid)

            self?.chartViewModel.search(idsearch:productid?.cartid)
            print(self?.chartViewModel.searchindex(objectatindex: 0))
            cell.setcartData(cartsadd: (self?.chartViewModel.searchindex(objectatindex:0))!)
            print(cell.quantity)

            self?.chartViewModel.totalPriceInCart()
            let theIntegerValue1 :[Int] =  (self?.chartViewModel.totalvalue)!
            let result = "\(theIntegerValue1[0])"
            print(result)
            let theStringValue1 :String = String(describing: result)
            print(theStringValue1)

            self?.totalresult.text = theStringValue1
            print(i)

        }
    }

viewmodel: -

class ChartViewModel: NSObject {


    var datasourceModel:ChartDataSourceModel

     var totalvalue:[Int] = []
    var insertedArray:CartModel? 

    var filteredListArray:Array<CartModel>? = []
    var productArray:CartModel?

     var finalListArray:Array<CartModel>? = []

    init(withdatasource  newDatasourceModel: ChartDataSourceModel) {
        datasourceModel = newDatasourceModel
        print(datasourceModel.dataListArray)

    }
    func search(idsearch :String?) {

        filteredListArray = datasourceModel.dataListArray?.filter{($0.cartid?.range(of: idsearch!, options: .caseInsensitive) != nil)}
        print(filteredListArray)


    }


    func searchindex(objectatindex index: Int) ->  CartModel {

        return self.filteredListArray![index]

    }



    func datafordisplay(atindex indexPath: IndexPath) -> CartModel{

             return  datasourceModel.dataListArray![indexPath.row]


    }

    func numberOfRowsInSection(section:Int) -> Int {

            return datasourceModel.dataListArray!.count


    }

    func delete(atIndex indexPath: IndexPath) {

        datasourceModel.dataListArray!.remove(at: indexPath.row)
         print(datasourceModel.dataListArray)

    }

    func totalPriceInCart() {




        var totalPrice: Int = 0
        for product in datasourceModel.dataListArray! {

            totalPrice += product.cartsumint!

            print(totalPrice)


        }
        self.totalvalue = [totalPrice]

   }



    func insert(atIndex indexPath: IndexPath) {
        print(productArray)
        print(datasourceModel.dataListArray)
        datasourceModel.dataListArray!.insert(productArray!, at: indexPath.row)
        print(datasourceModel.dataListArray)
        self.datasourceModel.dataListArray = datasourceModel.dataListArray
        print(datasourceModel.dataListArray)
        self.finalListArray =   self.datasourceModel.dataListArray
    }

      func add()  {

            datasourceModel.dataListArray?.append(insertedArray!)
            print(datasourceModel.dataListArray)
            print(insertedArray?.offerAddName)
            print(insertedArray?.offerprice)

            self.datasourceModel.dataListArray = datasourceModel.dataListArray

            print(insertedArray?.cartsum)

    }

 }

Приведенный выше код для добавления количества.И этот код дан в UITableView cellForRowAt делегате.Но проблема в следующем: -

- При добавлении количества товара цена также изменяется и будет отображаться в UITableView.Но при прокрутке UITableView данные будут отображаться, как и раньше. Это означает: -

Исходное предположение: - название продукта: автомобиль, цена: 300, количество: 1

.UITableView.Когда я добавил количество: 2, так что цена: 600 это покажет в UITableView.Но проблема в том, что при прокрутке UITableView она становится как цена: 300, количество: 1. Так как обновить UITableView.что делать

UITableviewCell: -

 func setEventData(carts:QM_CartModel)
    {



        self.name.text = carts.cartname

        self.price.text = carts.carttotalprice


        self.itemQuantityStepper.value = 1

        setItemQuantity(quantity)



        print(self.price.text)


        let value = carts.cartsum



        let x: Int? = Int(value!)
        print(x)


        let add = x!
        print(add)


        let theIntegerValue1 :Int =  add
        let theStringValue1 :String = String(theIntegerValue1)
        // self.price.text = theStringValue1

        self.price.text = "QR \(theStringValue1)"
        print(self.price.text)


    }


    func setcartData(cartsadd:QM_CartModel)
    {

        let theIntegerValue :Int =  self.quantity
        let theStringValue :String = String(theIntegerValue)
        cartsadd.cartquantity  = theStringValue
        print(cartsadd.cartquantity)
        print(cartsadd.cartsum)

        let value = cartsadd.cartsum
        let qty = cartsadd.cartquantity

        let x: Int? = Int(value!)
        print(x)
        let y: Int? = Int(qty!)
        print(y)


        let add = x! * y!
        print(add)


        let theIntegerValue1 :Int =  add
        let theStringValue1 :String = String(theIntegerValue1)
       // self.price.text = theStringValue1


        self.price.text = "QR \(theStringValue1)"
        print(self.price.text)


        cartsadd.cartsumint = theIntegerValue1
      //  print(cartsadd.cartsum)

    }

Ответы [ 2 ]

0 голосов
/ 25 мая 2018
class TableViewCellData {

    var data: Any?
}

-

class TableViewCell: UITableViewCell {

    var cellData: TableViewCellData?
    {
        didSet {
            // change data in cell from TableViewCellData
        }
    }

    var cartadd: (() -> Void)?
}

-

class ViewController: UITableViewController {

    var dataSource: [TableViewCellData] = []

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath) as! TableViewCell
        cell.cellData = dataSource[indexPath.row]
        cell.cartadd = {
            cell.cellData?.data = "" // set data to TableViewCellData
        }
        return cell
    }
}
0 голосов
/ 25 мая 2018

Вам необходимо сохранить свои данные (обновленные) в классе модели. Поскольку при прокрутке таблицы снова вызывается dequeuereusablecell, он получит данные из модели, поэтому вы всегда получаете старые данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...