我有一个表格视图和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
}
答案 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