Ячейка табличного представления получает начальное значение после прокрутки - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть табличное представление и 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 голосов
/ 27 февраля 2019

В вашей проблеме ячейка выключается и возвращается к старому состоянию, это, очевидно, произойдет из-за dequeReusableCell, теперь для решения вы должны использовать модель для хранения состояний различных флажков и в cellforRow. Добавить кодДля сохранения флажка в соответствии с моделью, когда вы включите флажок, измените значение переменной также в модели и оставьте его в своем коде cellForRowAt.Я добавляю небольшой пример для вашего понимания, надеюсь, это поможет.

CODE

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...