UITableViewCell устанавливает contentView backgroundColor с более чем одним разделом - PullRequest
0 голосов
/ 21 октября 2019

В методе didSelectRow в UITableView я изменяю contentView.backgroundColor UITableViewCell, но у меня есть 2 раздела, и когда я отливаю ячейку с помощью:

let selectedCell:UITableViewCell = tableView.cellForRow(at: indexPath)! и устанавливаю selectedCell.contentView.backgroundColor, код изменяетbackgroundColor обоих разделов. Как преобразовать ячейку только из indexPath.section?

ОБНОВЛЕНИЕ ОТ ответа @rmaddy

Когда я сохраняю в переменных indexPath.row и indexPath.section в методе didSelectRow и использую переменныев ячейке willDisplay или cellForRow для установки backgroundColor автоматически устанавливается backgroundColor для каждой строки 8-16-32-64.

ОБНОВЛЕНИЕ 2: в cellForRow я устанавливаю следующее:

    if(indexPath.row == selectedFromIndex && indexPath.section == selectedFromSection){
        cell.contentView.backgroundColor = UIColor(red: 0, green: 0, blue: 200, alpha: 0.1)
    }else{
        cell.backgroundColor = .clear
        cell.isSelected = false
    }

selectedFromIndex и selectedFromSection являются переменными, сохраненными в didSelectRowMethod. Выбор все еще появляется в строках 8-16-32-64 ...

1 Ответ

2 голосов
/ 21 октября 2019

Это не имеет ничего общего с кастингом. Вам просто нужен оператор if для проверки раздела.

if indexPath.section == 0 { // 1 depending on which section you need
    // get the cell and set the background color
}

Но это не удастся, так как пользователь прокручивает. В didSelectRow вы должны обновить свою модель данных, чтобы отслеживать, какие строки были выбраны и какие строки должны получить другой цветовой фон, а затем указывать табличному представлению перезагрузить эту строку.

Затем ваш кодв cellForRowAt (или willDisplay:forRowAt:) следует использовать эти данные для установки цветов ячейки по мере необходимости.

В каком бы способе вы это ни делали, убедитесь, что вы установили или сбросили цвет фона по мере необходимости, так как строкииспользуются повторно:

// pseudo code:
if row is selected {
    cell.backgroundColor = .someSelectedColor
} else {
    cell.backgroundColor = .someUnselectedColor
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...