2017-02-20 18 views
0

У меня есть UITableView, когда пользователь нажимает на ячейку, он становится серым, чтобы указать, что он завершен. Однако, когда ячейка прокручивается из поля зрения, когда она возвращается в поле зрения, она вернулась к цвету фона по умолчанию, стирая взаимодействие пользователей.Персистент UITableViewCell цвет фона на прокрутке tableViewCells

Есть ли способ сохранить цвет фона, используемый для прокрутки ячейки?

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

    guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? TodaysRoutineTableViewCell else { 
     fatalError("Unexpected Index Path") 
    } 
    cell.backgroundColor = UIColor.customBackgroundGraphite() 
    cell.textLabel?.textColor = UIColor.white 
    configure(cell, at: indexPath) 
    return cell 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    if let cell = tableView.cellForRow(at: indexPath) { 

     if cell.backgroundColor == UIColor.customExerciseDoneCellColor() { 
      cell.backgroundColor = UIColor.customBackgroundGraphite() 
     } else if cell.backgroundColor == UIColor.customBackgroundGraphite() { 
      cell.backgroundColor = UIColor.customExerciseDoneCellColor() 
     } 
    } 
} 
+0

Поддерживать состояние в вашей модели класса и использовать класс модели для заполнения ячейки. Отделите представление от вашей модели. – NSNoob

+0

Вы повторно используете ячейки с помощью 'tableView.dequeueReusableCell'. Это означает, что одни и те же ячейки повторно используются для отображения разных данных в режиме прокрутки/перезагрузки. Как вы предполагаете, что повторно используемая ячейка должна помнить, что она была выбрана до того, пока вы не предоставите ей эту информацию? – NSNoob

+0

Я знаю, что это проблема, я здесь ищу решение ... – jwarris91

ответ

-2

Проблема в том, когда вы прокручиваете после выбора ячейки, выбранный цвет не сохраняется, не так ли?

Ячейка для делегата строки вызывается всякий раз, когда вы прокручиваете. Таким образом, даже если вы задали фон в разделе «Отключить делегат», его изменили, когда вызывается Cell for row.

Чтобы справиться с этой ситуацией, добавьте булевую ячейку tableview и при выборе ячейки измените логическое состояние.

В ячейке для строки добавить следующее:

if cell.CheckBoolean == true{ 
    cell.backgroundcolor = UI.color() 
}else{ 
    cell.backgroungcolor = UI.color() 
} 

В сделал выбор делегат: изменить значение этого булева и перезагружать вид таблицы

+0

в OP я уже заявил, что это была проблема, ища решение ... – jwarris91

+0

SahyadriChava, я отредактировал ответ, надеюсь, это может быть решение. – Anuraj