滚动后,表格视图单元格获取初始值

时间:2019-02-27 08:03:07

标签: swift uitableview

我有一个表格视图和10个不同的原型单元。我使用情节提要,并为每个单元格创建了自定义UITableCell类。 CheckBoxCell中有一个复选框。我根据选项计数循环创建了这些复选框。

问题是,当我选中一个复选框后,复选框的值会更改,但是当我向上或向下滚动表视图时,复选框的值会更改为初始值。

我研究了stackoverflow中的一些问题。我遇到了这个问题,因为每次滚动后dequeReusebleCell都可以工作并在队列中重新创建单元格。我尝试使用这些解决方案,但没有成功。

我是Swift的新手,我不知道该如何解决这个问题。 有人可以告诉我如何解决这个问题,正确的方法是什么?

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

let object = surveyDetailArray.first!.elements[indexPath.row]
switch object.type {

    case CellConfig.checkbox.rawValue:

     let cell = tableView.dequeueReusableCell(withIdentifier: "CheckboxCell", for: indexPath) as! CheckboxCell

     let object = surveyDetailArray.first!.elements[indexPath.row]

     for label in object.options {

            cell.checkbox = BEMCheckBox()
            cell.checkbox.onAnimationType = .bounce
            cell.checkbox.offAnimationType = .bounce
            cell.checkbox.boxType = .square
            cell.checkbox.onFillColor = .red
            cell.checkbox.offFillColor = .white
            cell.checkbox.onCheckColor = .white
            cell.checkbox.delegate = self
            cell.checkbox.tag = label.id

            cell.contentView.addSubview(cell.checkbox)
      }

  return cell
  }

1 个答案:

答案 0 :(得分:0)

在您遇到的问题中,单元正在出队并返回到旧状态,这显然是由于dequeReusableCell导致的, 现在,对于该解决方案,您应该使用模型来存储不同复选框的状态以及在cellforRowAt上 启用复选框后,根据模型添加复选框持久性代码, 还要更改模型中变量的值,并将其保留在cellForRowAt代码上。我正在添加一个小示例供您理解,希望对您有所帮助。

代码

Struct ButtonsStates {
   var isButtonEnabled : Bool = false 
}

// In your ViewController use the above model for saving buttonValues
   var buttonStates : [ButtonStates]? // initialize as many as the rows

// in cellForRowAt 
   guard let cell = tableView.dequeueReusableCell(withIdentifier: "ExampleCell", for: indexPath) as? ExampleCell else { return fatalError("") }

 // here if the cell is dequeued still when cell will again be visible then this condition will be checked 
  cell.customButton.isSelected = buttonStates[indexPath.row].isButtonEnabled
   return cell