2017-01-24 1 views
0

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

Я не уверен, как это исправить, поскольку все, что я могу найти, относится к Objective-C, а не к Swift. Любая помощь и советы относительно того, как это сделать, были бы замечательными, спасибо.

+1

Покажите нам, что вы попробовали –

+0

Ничего, я все еще учился, и все, что я сделал, просматривает сообщения других, пытающихся выяснить, что делать, но я не могу понять причину этого, ни как для решения проблемы. –

+1

@Ethan, как вы кешируете выбранный индекс ячейки? Для этого вам нужно сохранить индекс ячейки в массиве. didSelectRowAtIndexPath - вам нужно добавить индекс в массив, если его нет. Если он уже присутствует, удалите индекс ячейки из массива. «cellForRowAtIndexPath» проверяет индекс ячейки, который выбран или нет! –

ответ

1

Каждый раз, когда UITableViewCell выходит из экрана, все функции, которые вы написали в tableViewController/ViewController, запускаются снова.

например, в cellForRowAtIndexPath, если у вас есть cell.setUpCell() или что-то подобное, оно перезапустит и сбросит ваши значения до исходных значений.

, если у вас есть

имя переменная = АСМАП в вашем MainVC

и обновлять что-то в вашей камере, вы должны изменить имя в mainVc тоже.

1

Каждый раз, когда вы прокручиваете или вызываете tableView.reloadData() Ячейки UITableView перезаряжатся. Таким образом, каждый раз, когда вы выбираете UITableViewCell, добавьте выбранный индекс (indexPath.row) в массив (например: selectedIndexArray) в своем делете didSelectRowAt indexPath:. Если выбранная ячейка уже выбрана, удалите ячейку с selectedIndexArray.

И в вашем cellForRowAt indexPath: управлять ячейками с использованием selectedIndexArray.

var selectedIndexArray:[Int] = [] //to save selected tableViewCells 

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

    let isSelected = false 
    for each in selectedIndexArray 
    { 
     if each == indexPath.row 
     { 
      isSelected = true 
     } 
    } 

    if isSelected == true 
    { 
     //set selected cell color 
    } 
    else 
    { 
     //set default cell color 
    } 
} 

Вам нужно написать логику добавления и удаления индексов клеток в вашем didSelectRowAt indexPath:.